/*
 * Copyright Codeplay Software Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use these files except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// DO NOT MODIFY BY HAND
// This file was automatically generated by generate_pooling_tests.py.
// Results calculated using Tensorflow v1.12.0.

#include <gtest/gtest.h>

#include "sycldnn/padding_mode.h"

#include "sycldnn/pooling/operators.h"

#include "test/types/cartesian_product.h"
#include "test/types/kernel_data_types.h"
#include "test/types/test_backend_types.h"
#include "test/types/to_gtest_types.h"

#include "test/pooling/pooling_fixture.h"

#include <array>
#include <vector>

using namespace sycldnn;  // NOLINT(google-build-using-namespace)
using DataTypeList = sycldnn::types::KernelDataTypes;
using Backends = sycldnn::types::DefaultBackendTypes;

using SNNTypePairs =
    sycldnn::types::CartesianProduct<DataTypeList, Backends>::type;
using GTestTypePairs = sycldnn::types::ToGTestTypes<SNNTypePairs>::type;

template <typename Pair>
using MaxWindow7Stride1Grad =
    PoolingFixture<typename Pair::FirstType, typename Pair::SecondType,
                   pooling::Max, pooling::Backpropagate>;
TYPED_TEST_SUITE(MaxWindow7Stride1Grad, GTestTypePairs);
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,  0.,
      0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,  0.,
      0.,  1.,  2.,  3.,   4.,  26., 0.,  0.,   0.,   9.,   10.,  11., 12.,
      58., 0.,  0.,  0.,   17., 18., 19., 20.,  90.,  0.,   0.,   0.,  25.,
      26., 27., 28., 122., 0.,  0.,  0.,  180., 184., 188., 192., 808.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 1., 2., 0., 0., 0., 0., 0., 0., 3., 4.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   1.,    2.,   3.,  4.,  5.,   6.,
      7.,   8.,   48.,  52.,  0.,   0.,   0.,    0.,   0.,  0.,  17.,  18.,
      19.,  20.,  21.,  22.,  23.,  24.,  112.,  116., 0.,  0.,  0.,   0.,
      0.,   0.,   33.,  34.,  35.,  36.,  37.,   38.,  39., 40., 176., 180.,
      0.,   0.,   0.,   0.,   0.,   0.,   49.,   50.,  51., 52., 53.,  54.,
      55.,  56.,  240., 244., 0.,   0.,   0.,    0.,   0.,  0.,  356., 360.,
      364., 368., 372., 376., 380., 384., 1600., 1616.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 3., 4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5., 6., 7., 8.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,    2.,    3.,    4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,  12.,
      13.,   14.,   15.,   16.,  92.,  96.,  100., 104., 0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   33.,  34.,  35.,  36.,
      37.,   38.,   39.,   40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,
      220.,  224.,  228.,  232., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   65.,  66.,  67.,  68.,  69.,  70.,  71.,  72.,
      73.,   74.,   75.,   76.,  77.,  78.,  79.,  80.,  348., 352., 356., 360.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      97.,   98.,   99.,   100., 101., 102., 103., 104., 105., 106., 107., 108.,
      109.,  110.,  111.,  112., 476., 480., 484., 488., 0.,   0.,   0.,   0.,
      0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   708., 712., 716., 720.,
      724.,  728.,  732.,  736., 740., 744., 748., 752., 756., 760., 764., 768.,
      3184., 3200., 3216., 3232.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9., 10., 11., 12., 13., 14., 15., 16.};
  const std::array<int, 4> in_shape = {{1, 8, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,   0.,  0.,  0.,   1.,   2.,   3.,   4.,   5.,   30.,
      0.,  0.,  0.,   10., 11., 12.,  13.,  14.,  66.,  0.,   0.,   0.,
      19., 20., 21.,  22., 23., 102., 0.,   0.,   0.,   28.,  29.,  30.,
      31., 32., 138., 0.,  0.,  0.,   202., 206., 210., 214., 218., 912.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 1., 2., 3., 0., 0., 0., 0., 0., 0., 4., 5., 6.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  56.,   60.,
      0.,   0.,   0.,   0.,   0.,   0.,   19.,  20.,  21.,  22.,  23.,   24.,
      25.,  26.,  27.,  28.,  128., 132., 0.,   0.,   0.,   0.,   0.,    0.,
      37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,  46.,  200.,  204.,
      0.,   0.,   0.,   0.,   0.,   0.,   55.,  56.,  57.,  58.,  59.,   60.,
      61.,  62.,  63.,  64.,  272., 276., 0.,   0.,   0.,   0.,   0.,    0.,
      400., 404., 408., 412., 416., 420., 424., 428., 432., 436., 1808., 1824.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 3., 4., 5., 6.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 7., 8., 9., 10., 11., 12.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    1.,
      2.,    3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,   12.,
      13.,   14.,  15.,  16.,  17.,  18.,  19.,  20.,  108., 112.,  116.,
      120.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,   45.,
      46.,   47.,  48.,  49.,  50.,  51.,  52.,  53.,  54.,  55.,   56.,
      252.,  256., 260., 264., 0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   73.,  74.,  75.,  76.,  77.,   78.,
      79.,   80.,  81.,  82.,  83.,  84.,  85.,  86.,  87.,  88.,   89.,
      90.,   91.,  92.,  396., 400., 404., 408., 0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   109., 110.,  111.,
      112.,  113., 114., 115., 116., 117., 118., 119., 120., 121.,  122.,
      123.,  124., 125., 126., 127., 128., 540., 544., 548., 552.,  0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      796.,  800., 804., 808., 812., 816., 820., 824., 828., 832.,  836.,
      840.,  844., 848., 852., 856., 860., 864., 868., 872., 3600., 3616.,
      3632., 3648.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      1.,  2.,  3., 4., 5., 6., 7.,  8.,  9.,  10., 11., 12., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
      22., 23., 24.};
  const std::array<int, 4> in_shape = {{1, 8, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,   0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,   0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  1.,   2.,  3.,
      4.,  5.,   6.,   34.,  0.,   0.,   0.,   11.,  12., 13.,  14., 15.,
      16., 74.,  0.,   0.,   0.,   21.,  22.,  23.,  24., 25.,  26., 114.,
      0.,  0.,   0.,   31.,  32.,  33.,  34.,  35.,  36., 154., 0.,  0.,
      0.,  224., 228., 232., 236., 240., 244., 1016.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 1., 2., 3., 4., 0., 0., 0., 0., 0., 0., 5., 6., 7., 8.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,   1.,   2.,   3.,   4.,   5.,   6.,
      7.,   8.,   9.,    10.,  11.,  12.,  64.,  68.,  0.,   0.,   0.,   0.,
      0.,   0.,   21.,   22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,
      31.,  32.,  144.,  148., 0.,   0.,   0.,   0.,   0.,   0.,   41.,  42.,
      43.,  44.,  45.,   46.,  47.,  48.,  49.,  50.,  51.,  52.,  224., 228.,
      0.,   0.,   0.,    0.,   0.,   0.,   61.,  62.,  63.,  64.,  65.,  66.,
      67.,  68.,  69.,   70.,  71.,  72.,  304., 308., 0.,   0.,   0.,   0.,
      0.,   0.,   444.,  448., 452., 456., 460., 464., 468., 472., 476., 480.,
      484., 488., 2016., 2032.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 1., 2., 3., 4., 5., 6.,  7.,  8.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9., 10., 11., 12., 13., 14., 15., 16.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   5.,    6.,    7.,    8.,   9.,   10.,  11.,  12.,
      13.,  14.,  15.,  16.,  17.,   18.,   19.,   20.,  21.,  22.,  23.,  24.,
      124., 128., 132., 136., 0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   41.,   42.,   43.,   44.,  45.,  46.,  47.,  48.,
      49.,  50.,  51.,  52.,  53.,   54.,   55.,   56.,  57.,  58.,  59.,  60.,
      61.,  62.,  63.,  64.,  284.,  288.,  292.,  296., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   81.,  82.,  83.,  84.,
      85.,  86.,  87.,  88.,  89.,   90.,   91.,   92.,  93.,  94.,  95.,  96.,
      97.,  98.,  99.,  100., 101.,  102.,  103.,  104., 444., 448., 452., 456.,
      0.,   0.,   0.,   0.,   0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      121., 122., 123., 124., 125.,  126.,  127.,  128., 129., 130., 131., 132.,
      133., 134., 135., 136., 137.,  138.,  139.,  140., 141., 142., 143., 144.,
      604., 608., 612., 616., 0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   884.,  888.,  892.,  896., 900., 904., 908., 912.,
      916., 920., 924., 928., 932.,  936.,  940.,  944., 948., 952., 956., 960.,
      964., 968., 972., 976., 4016., 4032., 4048., 4064.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,
      7.,  8.,  9.,  10., 11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27.,
      28., 29., 30., 31., 32.};
  const std::array<int, 4> in_shape = {{1, 8, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,  0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,
      0.,  0.,  0.,  1.,   2.,  3.,  4.,  26.,  0.,   0.,   0.,   9.,
      10., 11., 12., 58.,  0.,  0.,  0.,  17.,  18.,  19.,  20.,  90.,
      0.,  0.,  0.,  25.,  26., 27., 28., 122., 0.,   0.,   0.,   33.,
      34., 35., 36., 154., 0.,  0.,  0.,  212., 216., 220., 224., 936.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      1., 2., 0., 0., 0., 0., 0., 0., 3., 4., 0., 0., 0., 0., 0., 0., 5., 6.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,  0.,  0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,   5.,    6.,
      7.,  8.,  48.,  52.,  0.,   0.,   0.,   0.,   0.,   0.,   17.,   18.,
      19., 20., 21.,  22.,  23.,  24.,  112., 116., 0.,   0.,   0.,    0.,
      0.,  0.,  33.,  34.,  35.,  36.,  37.,  38.,  39.,  40.,  176.,  180.,
      0.,  0.,  0.,   0.,   0.,   0.,   49.,  50.,  51.,  52.,  53.,   54.,
      55., 56., 240., 244., 0.,   0.,   0.,   0.,   0.,   0.,   65.,   66.,
      67., 68., 69.,  70.,  71.,  72.,  304., 308., 0.,   0.,   0.,    0.,
      0.,  0.,  420., 424., 428., 432., 436., 440., 444., 448., 1856., 1872.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2.,  3.,  4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5., 6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9., 10., 11., 12.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,    2.,
      3.,    4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,  12.,   13.,
      14.,   15.,  16.,  92.,  96.,  100., 104., 0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,   33.,  34.,   35.,
      36.,   37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,   46.,
      47.,   48.,  220., 224., 228., 232., 0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   0.,   65.,  66.,  67.,   68.,
      69.,   70.,  71.,  72.,  73.,  74.,  75.,  76.,  77.,  78.,   79.,
      80.,   348., 352., 356., 360., 0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   0.,   97.,  98.,  99.,  100.,  101.,
      102.,  103., 104., 105., 106., 107., 108., 109., 110., 111.,  112.,
      476.,  480., 484., 488., 0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   0.,   129., 130., 131., 132., 133.,  134.,
      135.,  136., 137., 138., 139., 140., 141., 142., 143., 144.,  604.,
      608.,  612., 616., 0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,    0.,   0.,   0.,   836., 840., 844., 848., 852., 856.,  860.,
      864.,  868., 872., 876., 880., 884., 888., 892., 896., 3696., 3712.,
      3728., 3744.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20., 21., 22., 23., 24.};
  const std::array<int, 4> in_shape = {{1, 9, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,
      0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,
      0.,  0.,  0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,  5.,  30.,
      0.,  0.,  0.,   10.,  11.,  12.,  13.,  14.,  66.,  0.,  0.,  0.,
      19., 20., 21.,  22.,  23.,  102., 0.,   0.,   0.,   28., 29., 30.,
      31., 32., 138., 0.,   0.,   0.,   37.,  38.,  39.,  40., 41., 174.,
      0.,  0.,  0.,   238., 242., 246., 250., 254., 1056.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 3., 0., 0., 0., 0., 0.,
      0., 4., 5., 6., 0., 0., 0., 0., 0., 0., 7., 8., 9.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   5.,    6.,   7.,   8.,   9.,   10.,  56.,  60.,
      0.,   0.,   0.,   0.,   0.,    0.,   19.,  20.,  21.,  22.,  23.,  24.,
      25.,  26.,  27.,  28.,  128.,  132., 0.,   0.,   0.,   0.,   0.,   0.,
      37.,  38.,  39.,  40.,  41.,   42.,  43.,  44.,  45.,  46.,  200., 204.,
      0.,   0.,   0.,   0.,   0.,    0.,   55.,  56.,  57.,  58.,  59.,  60.,
      61.,  62.,  63.,  64.,  272.,  276., 0.,   0.,   0.,   0.,   0.,   0.,
      73.,  74.,  75.,  76.,  77.,   78.,  79.,  80.,  81.,  82.,  344., 348.,
      0.,   0.,   0.,   0.,   0.,    0.,   472., 476., 480., 484., 488., 492.,
      496., 500., 504., 508., 2096., 2112.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 1., 2., 3.,  4.,  5.,  6.,  0.,  0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 7., 8.,  9.,  10., 11., 12., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 13., 14., 15., 16., 17., 18.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    1.,
      2.,    3.,    4.,    5.,    6.,   7.,   8.,   9.,    10.,   11.,   12.,
      13.,   14.,   15.,   16.,   17.,  18.,  19.,  20.,   108.,  112.,  116.,
      120.,  0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    37.,   38.,   39.,  40.,  41.,  42.,   43.,   44.,   45.,
      46.,   47.,   48.,   49.,   50.,  51.,  52.,  53.,   54.,   55.,   56.,
      252.,  256.,  260.,  264.,  0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   73.,  74.,  75.,   76.,   77.,   78.,
      79.,   80.,   81.,   82.,   83.,  84.,  85.,  86.,   87.,   88.,   89.,
      90.,   91.,   92.,   396.,  400., 404., 408., 0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    109.,  110.,  111.,
      112.,  113.,  114.,  115.,  116., 117., 118., 119.,  120.,  121.,  122.,
      123.,  124.,  125.,  126.,  127., 128., 540., 544.,  548.,  552.,  0.,
      0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      145.,  146.,  147.,  148.,  149., 150., 151., 152.,  153.,  154.,  155.,
      156.,  157.,  158.,  159.,  160., 161., 162., 163.,  164.,  684.,  688.,
      692.,  696.,  0.,    0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,    940.,  944., 948., 952., 956.,  960.,  964.,  968.,
      972.,  976.,  980.,  984.,  988., 992., 996., 1000., 1004., 1008., 1012.,
      1016., 4176., 4192., 4208., 4224.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  13., 14., 15., 16., 17., 18., 19., 20., 21.,
      22., 23., 24., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  25., 26., 27.,
      28., 29., 30., 31., 32., 33., 34., 35., 36.};
  const std::array<int, 4> in_shape = {{1, 9, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,   0.,  0.,  0.,   0.,   0.,   1.,   2.,   3.,   4.,   5.,   6.,
      34., 0.,   0.,  0.,  11.,  12.,  13.,  14.,  15.,  16.,  74.,  0.,   0.,
      0.,  21.,  22., 23., 24.,  25.,  26.,  114., 0.,   0.,   0.,   31.,  32.,
      33., 34.,  35., 36., 154., 0.,   0.,   0.,   41.,  42.,  43.,  44.,  45.,
      46., 194., 0.,  0.,  0.,   264., 268., 272., 276., 280., 284., 1176.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 1., 2., 3., 4., 0., 0., 0.,  0.,  0.,
      0., 5., 6., 7., 8., 0., 0., 0., 0., 0., 0., 9., 10., 11., 12.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,   5.,    6.,
      7.,   8.,   9.,   10.,  11.,  12.,  64.,  68.,  0.,   0.,   0.,    0.,
      0.,   0.,   21.,  22.,  23.,  24.,  25.,  26.,  27.,  28.,  29.,   30.,
      31.,  32.,  144., 148., 0.,   0.,   0.,   0.,   0.,   0.,   41.,   42.,
      43.,  44.,  45.,  46.,  47.,  48.,  49.,  50.,  51.,  52.,  224.,  228.,
      0.,   0.,   0.,   0.,   0.,   0.,   61.,  62.,  63.,  64.,  65.,   66.,
      67.,  68.,  69.,  70.,  71.,  72.,  304., 308., 0.,   0.,   0.,    0.,
      0.,   0.,   81.,  82.,  83.,  84.,  85.,  86.,  87.,  88.,  89.,   90.,
      91.,  92.,  384., 388., 0.,   0.,   0.,   0.,   0.,   0.,   524.,  528.,
      532., 536., 540., 544., 548., 552., 556., 560., 564., 568., 2336., 2352.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,
      4., 5., 6., 7.,  8.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 9., 10., 11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x9x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,
      9.,    10.,   11.,   12.,   13.,   14.,   15.,   16.,   17.,   18.,
      19.,   20.,   21.,   22.,   23.,   24.,   124.,  128.,  132.,  136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    41.,   42.,   43.,   44.,   45.,   46.,   47.,   48.,
      49.,   50.,   51.,   52.,   53.,   54.,   55.,   56.,   57.,   58.,
      59.,   60.,   61.,   62.,   63.,   64.,   284.,  288.,  292.,  296.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    81.,   82.,   83.,   84.,   85.,   86.,   87.,   88.,
      89.,   90.,   91.,   92.,   93.,   94.,   95.,   96.,   97.,   98.,
      99.,   100.,  101.,  102.,  103.,  104.,  444.,  448.,  452.,  456.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    121.,  122.,  123.,  124.,  125.,  126.,  127.,  128.,
      129.,  130.,  131.,  132.,  133.,  134.,  135.,  136.,  137.,  138.,
      139.,  140.,  141.,  142.,  143.,  144.,  604.,  608.,  612.,  616.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    161.,  162.,  163.,  164.,  165.,  166.,  167.,  168.,
      169.,  170.,  171.,  172.,  173.,  174.,  175.,  176.,  177.,  178.,
      179.,  180.,  181.,  182.,  183.,  184.,  764.,  768.,  772.,  776.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    1044., 1048., 1052., 1056., 1060., 1064., 1068., 1072.,
      1076., 1080., 1084., 1088., 1092., 1096., 1100., 1104., 1108., 1112.,
      1116., 1120., 1124., 1128., 1132., 1136., 4656., 4672., 4688., 4704.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x9x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,
      3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 13., 14., 15., 16.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  17., 18., 19., 20.,
      21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33., 34., 35., 36., 37., 38.,
      39., 40., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{1, 9, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,  0.,  1.,   2.,   3.,   4.,   26.,  0.,  0.,  0.,  9.,
      10., 11., 12., 58.,  0.,   0.,   0.,   17.,  18., 19., 20., 90.,
      0.,  0.,  0.,  25.,  26.,  27.,  28.,  122., 0.,  0.,  0.,  33.,
      34., 35., 36., 154., 0.,   0.,   0.,   41.,  42., 43., 44., 186.,
      0.,  0.,  0.,  244., 248., 252., 256., 1064.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 1., 2., 0., 0., 0., 0., 0., 0., 3., 4.,
      0., 0., 0., 0., 0., 0., 5., 6., 0., 0., 0., 0., 0., 0., 7., 8.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,  0.,  1.,   2.,   3.,   4.,   5.,   6.,
      7.,   8.,   48.,   52.,  0.,  0.,  0.,   0.,   0.,   0.,   17.,  18.,
      19.,  20.,  21.,   22.,  23., 24., 112., 116., 0.,   0.,   0.,   0.,
      0.,   0.,   33.,   34.,  35., 36., 37.,  38.,  39.,  40.,  176., 180.,
      0.,   0.,   0.,    0.,   0.,  0.,  49.,  50.,  51.,  52.,  53.,  54.,
      55.,  56.,  240.,  244., 0.,  0.,  0.,   0.,   0.,   0.,   65.,  66.,
      67.,  68.,  69.,   70.,  71., 72., 304., 308., 0.,   0.,   0.,   0.,
      0.,   0.,   81.,   82.,  83., 84., 85.,  86.,  87.,  88.,  368., 372.,
      0.,   0.,   0.,    0.,   0.,  0.,  484., 488., 492., 496., 500., 504.,
      508., 512., 2112., 2128.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    1.,    2.,
      3.,    4.,    5.,    6.,    7.,    8.,    9.,    10.,   11.,   12.,
      13.,   14.,   15.,   16.,   92.,   96.,   100.,  104.,  0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      33.,   34.,   35.,   36.,   37.,   38.,   39.,   40.,   41.,   42.,
      43.,   44.,   45.,   46.,   47.,   48.,   220.,  224.,  228.,  232.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    65.,   66.,   67.,   68.,   69.,   70.,   71.,   72.,
      73.,   74.,   75.,   76.,   77.,   78.,   79.,   80.,   348.,  352.,
      356.,  360.,  0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    97.,   98.,   99.,   100.,  101.,  102.,
      103.,  104.,  105.,  106.,  107.,  108.,  109.,  110.,  111.,  112.,
      476.,  480.,  484.,  488.,  0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    129.,  130.,  131.,  132.,
      133.,  134.,  135.,  136.,  137.,  138.,  139.,  140.,  141.,  142.,
      143.,  144.,  604.,  608.,  612.,  616.,  0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    161.,  162.,
      163.,  164.,  165.,  166.,  167.,  168.,  169.,  170.,  171.,  172.,
      173.,  174.,  175.,  176.,  732.,  736.,  740.,  744.,  0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      964.,  968.,  972.,  976.,  980.,  984.,  988.,  992.,  996.,  1000.,
      1004., 1008., 1012., 1016., 1020., 1024., 4208., 4224., 4240., 4256.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28., 29., 30., 31., 32.};
  const std::array<int, 4> in_shape = {{1, 10, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,  0.,  0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,  0.,   0.,   0.,  1.,  2.,  3.,   4.,   5.,   30.,  0.,   0.,   0.,
      10., 11.,  12.,  13., 14., 66., 0.,   0.,   0.,   19.,  20.,  21.,  22.,
      23., 102., 0.,   0.,  0.,  28., 29.,  30.,  31.,  32.,  138., 0.,   0.,
      0.,  37.,  38.,  39., 40., 41., 174., 0.,   0.,   0.,   46.,  47.,  48.,
      49., 50.,  210., 0.,  0.,  0.,  274., 278., 282., 286., 290., 1200.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,
      1., 2., 3., 0., 0., 0., 0., 0., 0., 4., 5., 6., 0.,  0.,  0.,
      0., 0., 0., 7., 8., 9., 0., 0., 0., 0., 0., 0., 10., 11., 12.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,
      1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  56.,   60.,
      0.,   0.,   0.,   0.,   0.,   0.,   19.,  20.,  21.,  22.,  23.,   24.,
      25.,  26.,  27.,  28.,  128., 132., 0.,   0.,   0.,   0.,   0.,    0.,
      37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,  46.,  200.,  204.,
      0.,   0.,   0.,   0.,   0.,   0.,   55.,  56.,  57.,  58.,  59.,   60.,
      61.,  62.,  63.,  64.,  272., 276., 0.,   0.,   0.,   0.,   0.,    0.,
      73.,  74.,  75.,  76.,  77.,  78.,  79.,  80.,  81.,  82.,  344.,  348.,
      0.,   0.,   0.,   0.,   0.,   0.,   91.,  92.,  93.,  94.,  95.,   96.,
      97.,  98.,  99.,  100., 416., 420., 0.,   0.,   0.,   0.,   0.,    0.,
      544., 548., 552., 556., 560., 564., 568., 572., 576., 580., 2384., 2400.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 1., 2., 3.,  4.,  5.,  6.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 7., 8.,  9.,  10., 11., 12., 0.,  0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 13., 14., 15., 16., 17., 18., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  19., 20., 21., 22., 23., 24.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,    10.,
      11.,   12.,   13.,   14.,   15.,   16.,   17.,   18.,   19.,   20.,
      108.,  112.,  116.,  120.,  0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    37.,   38.,   39.,   40.,
      41.,   42.,   43.,   44.,   45.,   46.,   47.,   48.,   49.,   50.,
      51.,   52.,   53.,   54.,   55.,   56.,   252.,  256.,  260.,  264.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    73.,   74.,   75.,   76.,   77.,   78.,   79.,   80.,
      81.,   82.,   83.,   84.,   85.,   86.,   87.,   88.,   89.,   90.,
      91.,   92.,   396.,  400.,  404.,  408.,  0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    109.,  110.,
      111.,  112.,  113.,  114.,  115.,  116.,  117.,  118.,  119.,  120.,
      121.,  122.,  123.,  124.,  125.,  126.,  127.,  128.,  540.,  544.,
      548.,  552.,  0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    145.,  146.,  147.,  148.,  149.,  150.,
      151.,  152.,  153.,  154.,  155.,  156.,  157.,  158.,  159.,  160.,
      161.,  162.,  163.,  164.,  684.,  688.,  692.,  696.,  0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      181.,  182.,  183.,  184.,  185.,  186.,  187.,  188.,  189.,  190.,
      191.,  192.,  193.,  194.,  195.,  196.,  197.,  198.,  199.,  200.,
      828.,  832.,  836.,  840.,  0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    1084., 1088., 1092., 1096.,
      1100., 1104., 1108., 1112., 1116., 1120., 1124., 1128., 1132., 1136.,
      1140., 1144., 1148., 1152., 1156., 1160., 4752., 4768., 4784., 4800.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  13., 14., 15., 16.,
      17., 18., 19., 20., 21., 22., 23., 24., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  25., 26., 27., 28., 29., 30., 31., 32., 33., 34.,
      35., 36., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  37., 38.,
      39., 40., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{1, 10, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,   0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,  4.,  5.,   6.,
      34., 0.,   0.,   0.,   11.,  12.,  13.,  14.,  15.,  16., 74., 0.,   0.,
      0.,  21.,  22.,  23.,  24.,  25.,  26.,  114., 0.,   0.,  0.,  31.,  32.,
      33., 34.,  35.,  36.,  154., 0.,   0.,   0.,   41.,  42., 43., 44.,  45.,
      46., 194., 0.,   0.,   0.,   51.,  52.,  53.,  54.,  55., 56., 234., 0.,
      0.,  0.,   304., 308., 312., 316., 320., 324., 1336.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0.,
      0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0.,
      0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 0., 0.,
      0., 0., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0., 1., 2.,
      3., 4., 0.,  0.,  0.,  0., 0., 0., 5., 6., 7., 8.,  0.,  0.,  0., 0., 0.,
      0., 9., 10., 11., 12., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   1.,    2.,   3.,   4.,   5.,   6.,
      7.,   8.,   9.,   10.,  11.,  12.,  64.,   68.,  0.,   0.,   0.,   0.,
      0.,   0.,   21.,  22.,  23.,  24.,  25.,   26.,  27.,  28.,  29.,  30.,
      31.,  32.,  144., 148., 0.,   0.,   0.,    0.,   0.,   0.,   41.,  42.,
      43.,  44.,  45.,  46.,  47.,  48.,  49.,   50.,  51.,  52.,  224., 228.,
      0.,   0.,   0.,   0.,   0.,   0.,   61.,   62.,  63.,  64.,  65.,  66.,
      67.,  68.,  69.,  70.,  71.,  72.,  304.,  308., 0.,   0.,   0.,   0.,
      0.,   0.,   81.,  82.,  83.,  84.,  85.,   86.,  87.,  88.,  89.,  90.,
      91.,  92.,  384., 388., 0.,   0.,   0.,    0.,   0.,   0.,   101., 102.,
      103., 104., 105., 106., 107., 108., 109.,  110., 111., 112., 464., 468.,
      0.,   0.,   0.,   0.,   0.,   0.,   604.,  608., 612., 616., 620., 624.,
      628., 632., 636., 640., 644., 648., 2656., 2672.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,
      4.,  5.,  6.,  7.,  8.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  9.,  10., 11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  25., 26., 27.,
      28., 29., 30., 31., 32.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME1x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,
      9.,    10.,   11.,   12.,   13.,   14.,   15.,   16.,   17.,   18.,
      19.,   20.,   21.,   22.,   23.,   24.,   124.,  128.,  132.,  136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    41.,   42.,   43.,   44.,   45.,   46.,   47.,   48.,
      49.,   50.,   51.,   52.,   53.,   54.,   55.,   56.,   57.,   58.,
      59.,   60.,   61.,   62.,   63.,   64.,   284.,  288.,  292.,  296.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    81.,   82.,   83.,   84.,   85.,   86.,   87.,   88.,
      89.,   90.,   91.,   92.,   93.,   94.,   95.,   96.,   97.,   98.,
      99.,   100.,  101.,  102.,  103.,  104.,  444.,  448.,  452.,  456.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    121.,  122.,  123.,  124.,  125.,  126.,  127.,  128.,
      129.,  130.,  131.,  132.,  133.,  134.,  135.,  136.,  137.,  138.,
      139.,  140.,  141.,  142.,  143.,  144.,  604.,  608.,  612.,  616.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    161.,  162.,  163.,  164.,  165.,  166.,  167.,  168.,
      169.,  170.,  171.,  172.,  173.,  174.,  175.,  176.,  177.,  178.,
      179.,  180.,  181.,  182.,  183.,  184.,  764.,  768.,  772.,  776.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    201.,  202.,  203.,  204.,  205.,  206.,  207.,  208.,
      209.,  210.,  211.,  212.,  213.,  214.,  215.,  216.,  217.,  218.,
      219.,  220.,  221.,  222.,  223.,  224.,  924.,  928.,  932.,  936.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    1204., 1208., 1212., 1216., 1220., 1224., 1228., 1232.,
      1236., 1240., 1244., 1248., 1252., 1256., 1260., 1264., 1268., 1272.,
      1276., 1280., 1284., 1288., 1292., 1296., 5296., 5312., 5328., 5344.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID1x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,
      7.,  8.,  9.,  10., 11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24., 25., 26., 27.,
      28., 29., 30., 31., 32., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33.,
      34., 35., 36., 37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  49., 50., 51., 52., 53., 54.,
      55., 56., 57., 58., 59., 60., 61., 62., 63., 64.};
  const std::array<int, 4> in_shape = {{1, 10, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,
      0.,   0.,   0.,   1.,   2.,   3.,   4.,   26.,   0.,   0.,   0.,   9.,
      10.,  11.,  12.,  58.,  0.,   0.,   0.,   17.,   18.,  19.,  20.,  90.,
      0.,   0.,   0.,   25.,  26.,  27.,  28.,  122.,  0.,   0.,   0.,   180.,
      184., 188., 192., 808., 0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   65.,   66.,  67.,  68.,  282.,
      0.,   0.,   0.,   73.,  74.,  75.,  76.,  314.,  0.,   0.,   0.,   81.,
      82.,  83.,  84.,  346., 0.,   0.,   0.,   89.,   90.,  91.,  92.,  378.,
      0.,   0.,   0.,   436., 440., 444., 448., 1832., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,   129.,
      130., 131., 132., 538., 0.,   0.,   0.,   137.,  138., 139., 140., 570.,
      0.,   0.,   0.,   145., 146., 147., 148., 602.,  0.,   0.,   0.,   153.,
      154., 155., 156., 634., 0.,   0.,   0.,   692.,  696., 700., 704., 2856.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      1., 2., 0., 0.,  0., 0., 0., 0., 3., 4., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 5.,  6., 0., 0., 0., 0., 0., 0.,
      7., 8., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,  0., 0., 0., 0., 0., 0., 0.,
      0., 0., 9., 10., 0., 0., 0., 0., 0., 0., 11., 12.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   1.,    2.,    3.,    4.,    5.,    6.,
      7.,    8.,    48.,   52.,  0.,    0.,    0.,    0.,    0.,    0.,
      17.,   18.,   19.,   20.,  21.,   22.,   23.,   24.,   112.,  116.,
      0.,    0.,    0.,    0.,   0.,    0.,    33.,   34.,   35.,   36.,
      37.,   38.,   39.,   40.,  176.,  180.,  0.,    0.,    0.,    0.,
      0.,    0.,    49.,   50.,  51.,   52.,   53.,   54.,   55.,   56.,
      240.,  244.,  0.,    0.,   0.,    0.,    0.,    0.,    356.,  360.,
      364.,  368.,  372.,  376., 380.,  384.,  1600., 1616., 0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    129.,  130., 131.,  132.,  133.,  134.,  135.,  136.,
      560.,  564.,  0.,    0.,   0.,    0.,    0.,    0.,    145.,  146.,
      147.,  148.,  149.,  150., 151.,  152.,  624.,  628.,  0.,    0.,
      0.,    0.,    0.,    0.,   161.,  162.,  163.,  164.,  165.,  166.,
      167.,  168.,  688.,  692., 0.,    0.,    0.,    0.,    0.,    0.,
      177.,  178.,  179.,  180., 181.,  182.,  183.,  184.,  752.,  756.,
      0.,    0.,    0.,    0.,   0.,    0.,    868.,  872.,  876.,  880.,
      884.,  888.,  892.,  896., 3648., 3664., 0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,   0.,    0.,    0.,    0.,    0.,    0.,
      257.,  258.,  259.,  260., 261.,  262.,  263.,  264.,  1072., 1076.,
      0.,    0.,    0.,    0.,   0.,    0.,    273.,  274.,  275.,  276.,
      277.,  278.,  279.,  280., 1136., 1140., 0.,    0.,    0.,    0.,
      0.,    0.,    289.,  290., 291.,  292.,  293.,  294.,  295.,  296.,
      1200., 1204., 0.,    0.,   0.,    0.,    0.,    0.,    305.,  306.,
      307.,  308.,  309.,  310., 311.,  312.,  1264., 1268., 0.,    0.,
      0.,    0.,    0.,    0.,   1380., 1384., 1388., 1392., 1396., 1400.,
      1404., 1408., 5696., 5712.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 23., 24.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    1.,    2.,
      3.,    4.,    5.,    6.,    7.,     8.,     9.,     10.,   11.,   12.,
      13.,   14.,   15.,   16.,   92.,    96.,    100.,   104.,  0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      33.,   34.,   35.,   36.,   37.,    38.,    39.,    40.,   41.,   42.,
      43.,   44.,   45.,   46.,   47.,    48.,    220.,   224.,  228.,  232.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    65.,   66.,   67.,    68.,    69.,    70.,   71.,   72.,
      73.,   74.,   75.,   76.,   77.,    78.,    79.,    80.,   348.,  352.,
      356.,  360.,  0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    97.,    98.,    99.,    100.,  101.,  102.,
      103.,  104.,  105.,  106.,  107.,   108.,   109.,   110.,  111.,  112.,
      476.,  480.,  484.,  488.,  0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     708.,   712.,  716.,  720.,
      724.,  728.,  732.,  736.,  740.,   744.,   748.,   752.,  756.,  760.,
      764.,  768.,  3184., 3200., 3216.,  3232.,  0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    257.,   258.,   259.,   260.,  261.,  262.,
      263.,  264.,  265.,  266.,  267.,   268.,   269.,   270.,  271.,  272.,
      1116., 1120., 1124., 1128., 0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     289.,   290.,  291.,  292.,
      293.,  294.,  295.,  296.,  297.,   298.,   299.,   300.,  301.,  302.,
      303.,  304.,  1244., 1248., 1252.,  1256.,  0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    321.,  322.,
      323.,  324.,  325.,  326.,  327.,   328.,   329.,   330.,  331.,  332.,
      333.,  334.,  335.,  336.,  1372.,  1376.,  1380.,  1384., 0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      353.,  354.,  355.,  356.,  357.,   358.,   359.,   360.,  361.,  362.,
      363.,  364.,  365.,  366.,  367.,   368.,   1500.,  1504., 1508., 1512.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    1732., 1736., 1740.,  1744.,  1748.,  1752., 1756., 1760.,
      1764., 1768., 1772., 1776., 1780.,  1784.,  1788.,  1792., 7280., 7296.,
      7312., 7328., 0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      513.,  514.,  515.,  516.,  517.,   518.,   519.,   520.,  521.,  522.,
      523.,  524.,  525.,  526.,  527.,   528.,   2140.,  2144., 2148., 2152.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    545.,  546.,  547.,   548.,   549.,   550.,  551.,  552.,
      553.,  554.,  555.,  556.,  557.,   558.,   559.,   560.,  2268., 2272.,
      2276., 2280., 0.,    0.,    0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    577.,   578.,   579.,   580.,  581.,  582.,
      583.,  584.,  585.,  586.,  587.,   588.,   589.,   590.,  591.,  592.,
      2396., 2400., 2404., 2408., 0.,     0.,     0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     609.,   610.,  611.,  612.,
      613.,  614.,  615.,  616.,  617.,   618.,   619.,   620.,  621.,  622.,
      623.,  624.,  2524., 2528., 2532.,  2536.,  0.,     0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,    2756., 2760.,
      2764., 2768., 2772., 2776., 2780.,  2784.,  2788.,  2792., 2796., 2800.,
      2804., 2808., 2812., 2816., 11376., 11392., 11408., 11424.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28., 29., 30., 31., 32.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 35., 36., 37., 38., 39., 40.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 41., 42., 43., 44., 45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{3, 8, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,   5.,   30.,
      0.,   0.,   0.,   10.,  11.,  12.,  13.,  14.,  66.,  0.,   0.,   0.,
      19.,  20.,  21.,  22.,  23.,  102., 0.,   0.,   0.,   28.,  29.,  30.,
      31.,  32.,  138., 0.,   0.,   0.,   202., 206., 210., 214., 218., 912.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   73.,  74.,  75.,  76.,  77.,  318.,
      0.,   0.,   0.,   82.,  83.,  84.,  85.,  86.,  354., 0.,   0.,   0.,
      91.,  92.,  93.,  94.,  95.,  390., 0.,   0.,   0.,   100., 101., 102.,
      103., 104., 426., 0.,   0.,   0.,   490., 494., 498., 502., 506., 2064.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   145., 146., 147., 148., 149., 606.,
      0.,   0.,   0.,   154., 155., 156., 157., 158., 642., 0.,   0.,   0.,
      163., 164., 165., 166., 167., 678., 0.,   0.,   0.,   172., 173., 174.,
      175., 176., 714., 0.,   0.,   0.,   778., 782., 786., 790., 794., 3216.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 1.,  2.,  3.,  0.,
      0., 0., 0., 0., 0., 4.,  5.,  6., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 7., 8.,  9.,  0., 0., 0., 0., 0., 0.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 13., 14., 15., 0.,
      0., 0., 0., 0., 0., 16., 17., 18.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,    10.,
      56.,   60.,   0.,    0.,    0.,    0.,    0.,    0.,    19.,   20.,
      21.,   22.,   23.,   24.,   25.,   26.,   27.,   28.,   128.,  132.,
      0.,    0.,    0.,    0.,    0.,    0.,    37.,   38.,   39.,   40.,
      41.,   42.,   43.,   44.,   45.,   46.,   200.,  204.,  0.,    0.,
      0.,    0.,    0.,    0.,    55.,   56.,   57.,   58.,   59.,   60.,
      61.,   62.,   63.,   64.,   272.,  276.,  0.,    0.,    0.,    0.,
      0.,    0.,    400.,  404.,  408.,  412.,  416.,  420.,  424.,  428.,
      432.,  436.,  1808., 1824., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    145.,  146.,  147.,  148.,  149.,  150.,
      151.,  152.,  153.,  154.,  632.,  636.,  0.,    0.,    0.,    0.,
      0.,    0.,    163.,  164.,  165.,  166.,  167.,  168.,  169.,  170.,
      171.,  172.,  704.,  708.,  0.,    0.,    0.,    0.,    0.,    0.,
      181.,  182.,  183.,  184.,  185.,  186.,  187.,  188.,  189.,  190.,
      776.,  780.,  0.,    0.,    0.,    0.,    0.,    0.,    199.,  200.,
      201.,  202.,  203.,  204.,  205.,  206.,  207.,  208.,  848.,  852.,
      0.,    0.,    0.,    0.,    0.,    0.,    976.,  980.,  984.,  988.,
      992.,  996.,  1000., 1004., 1008., 1012., 4112., 4128., 0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    289.,  290.,
      291.,  292.,  293.,  294.,  295.,  296.,  297.,  298.,  1208., 1212.,
      0.,    0.,    0.,    0.,    0.,    0.,    307.,  308.,  309.,  310.,
      311.,  312.,  313.,  314.,  315.,  316.,  1280., 1284., 0.,    0.,
      0.,    0.,    0.,    0.,    325.,  326.,  327.,  328.,  329.,  330.,
      331.,  332.,  333.,  334.,  1352., 1356., 0.,    0.,    0.,    0.,
      0.,    0.,    343.,  344.,  345.,  346.,  347.,  348.,  349.,  350.,
      351.,  352.,  1424., 1428., 0.,    0.,    0.,    0.,    0.,    0.,
      1552., 1556., 1560., 1564., 1568., 1572., 1576., 1580., 1584., 1588.,
      6416., 6432.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  7.,  8.,  9.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16., 17., 18., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  19., 20., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28., 29., 30., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  31., 32., 33., 34., 35., 36.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      1.,     2.,     3.,     4.,    5.,    6.,    7.,    8.,    9.,    10.,
      11.,    12.,    13.,    14.,   15.,   16.,   17.,   18.,   19.,   20.,
      108.,   112.,   116.,   120.,  0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    37.,   38.,   39.,   40.,
      41.,    42.,    43.,    44.,   45.,   46.,   47.,   48.,   49.,   50.,
      51.,    52.,    53.,    54.,   55.,   56.,   252.,  256.,  260.,  264.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     73.,    74.,   75.,   76.,   77.,   78.,   79.,   80.,
      81.,    82.,    83.,    84.,   85.,   86.,   87.,   88.,   89.,   90.,
      91.,    92.,    396.,   400.,  404.,  408.,  0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    109.,  110.,
      111.,   112.,   113.,   114.,  115.,  116.,  117.,  118.,  119.,  120.,
      121.,   122.,   123.,   124.,  125.,  126.,  127.,  128.,  540.,  544.,
      548.,   552.,   0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    796.,  800.,  804.,  808.,  812.,  816.,
      820.,   824.,   828.,   832.,  836.,  840.,  844.,  848.,  852.,  856.,
      860.,   864.,   868.,   872.,  3600., 3616., 3632., 3648., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    289.,  290.,
      291.,   292.,   293.,   294.,  295.,  296.,  297.,  298.,  299.,  300.,
      301.,   302.,   303.,   304.,  305.,  306.,  307.,  308.,  1260., 1264.,
      1268.,  1272.,  0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    325.,  326.,  327.,  328.,  329.,  330.,
      331.,   332.,   333.,   334.,  335.,  336.,  337.,  338.,  339.,  340.,
      341.,   342.,   343.,   344.,  1404., 1408., 1412., 1416., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      361.,   362.,   363.,   364.,  365.,  366.,  367.,  368.,  369.,  370.,
      371.,   372.,   373.,   374.,  375.,  376.,  377.,  378.,  379.,  380.,
      1548.,  1552.,  1556.,  1560., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    397.,  398.,  399.,  400.,
      401.,   402.,   403.,   404.,  405.,  406.,  407.,  408.,  409.,  410.,
      411.,   412.,   413.,   414.,  415.,  416.,  1692., 1696., 1700., 1704.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     1948.,  1952., 1956., 1960., 1964., 1968., 1972., 1976.,
      1980.,  1984.,  1988.,  1992., 1996., 2000., 2004., 2008., 2012., 2016.,
      2020.,  2024.,  8208.,  8224., 8240., 8256., 0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    577.,  578.,  579.,  580.,
      581.,   582.,   583.,   584.,  585.,  586.,  587.,  588.,  589.,  590.,
      591.,   592.,   593.,   594.,  595.,  596.,  2412., 2416., 2420., 2424.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     613.,   614.,  615.,  616.,  617.,  618.,  619.,  620.,
      621.,   622.,   623.,   624.,  625.,  626.,  627.,  628.,  629.,  630.,
      631.,   632.,   2556.,  2560., 2564., 2568., 0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    649.,  650.,
      651.,   652.,   653.,   654.,  655.,  656.,  657.,  658.,  659.,  660.,
      661.,   662.,   663.,   664.,  665.,  666.,  667.,  668.,  2700., 2704.,
      2708.,  2712.,  0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    685.,  686.,  687.,  688.,  689.,  690.,
      691.,   692.,   693.,   694.,  695.,  696.,  697.,  698.,  699.,  700.,
      701.,   702.,   703.,   704.,  2844., 2848., 2852., 2856., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      3100.,  3104.,  3108.,  3112., 3116., 3120., 3124., 3128., 3132., 3136.,
      3140.,  3144.,  3148.,  3152., 3156., 3160., 3164., 3168., 3172., 3176.,
      12816., 12832., 12848., 12864.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  13., 14., 15., 16., 17., 18., 19., 20., 21.,
      22., 23., 24., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  37., 38., 39., 40., 41., 42.,
      43., 44., 45., 46., 47., 48., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  49., 50., 51., 52., 53., 54., 55., 56., 57.,
      58., 59., 60., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  61., 62., 63.,
      64., 65., 66., 67., 68., 69., 70., 71., 72.};
  const std::array<int, 4> in_shape = {{3, 8, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,    4.,   5.,   6.,    34.,  0.,   0.,   0.,   11.,
      12.,  13.,  14.,   15.,  16.,  74.,   0.,   0.,   0.,   21.,  22.,
      23.,  24.,  25.,   26.,  114., 0.,    0.,   0.,   31.,  32.,  33.,
      34.,  35.,  36.,   154., 0.,   0.,    0.,   224., 228., 232., 236.,
      240., 244., 1016., 0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    81.,  82.,  83.,   84.,  85.,  86.,  354., 0.,
      0.,   0.,   91.,   92.,  93.,  94.,   95.,  96.,  394., 0.,   0.,
      0.,   101., 102.,  103., 104., 105.,  106., 434., 0.,   0.,   0.,
      111., 112., 113.,  114., 115., 116.,  474., 0.,   0.,   0.,   544.,
      548., 552., 556.,  560., 564., 2296., 0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    161., 162., 163., 164., 165.,
      166., 674., 0.,    0.,   0.,   171.,  172., 173., 174., 175., 176.,
      714., 0.,   0.,    0.,   181., 182.,  183., 184., 185., 186., 754.,
      0.,   0.,   0.,    191., 192., 193.,  194., 195., 196., 794., 0.,
      0.,   0.,   864.,  868., 872., 876.,  880., 884., 3576.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 1.,  2.,  3.,  4.,  0., 0., 0., 0., 0., 0., 5.,  6.,  7.,  8.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 9.,  10., 11., 12., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 17., 18., 19., 20., 0., 0., 0., 0., 0., 0., 21., 22., 23., 24.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    1.,    2.,    3.,    4.,
      5.,    6.,    7.,    8.,    9.,    10.,   11.,   12.,   64.,   68.,
      0.,    0.,    0.,    0.,    0.,    0.,    21.,   22.,   23.,   24.,
      25.,   26.,   27.,   28.,   29.,   30.,   31.,   32.,   144.,  148.,
      0.,    0.,    0.,    0.,    0.,    0.,    41.,   42.,   43.,   44.,
      45.,   46.,   47.,   48.,   49.,   50.,   51.,   52.,   224.,  228.,
      0.,    0.,    0.,    0.,    0.,    0.,    61.,   62.,   63.,   64.,
      65.,   66.,   67.,   68.,   69.,   70.,   71.,   72.,   304.,  308.,
      0.,    0.,    0.,    0.,    0.,    0.,    444.,  448.,  452.,  456.,
      460.,  464.,  468.,  472.,  476.,  480.,  484.,  488.,  2016., 2032.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    161.,  162.,  163.,  164.,
      165.,  166.,  167.,  168.,  169.,  170.,  171.,  172.,  704.,  708.,
      0.,    0.,    0.,    0.,    0.,    0.,    181.,  182.,  183.,  184.,
      185.,  186.,  187.,  188.,  189.,  190.,  191.,  192.,  784.,  788.,
      0.,    0.,    0.,    0.,    0.,    0.,    201.,  202.,  203.,  204.,
      205.,  206.,  207.,  208.,  209.,  210.,  211.,  212.,  864.,  868.,
      0.,    0.,    0.,    0.,    0.,    0.,    221.,  222.,  223.,  224.,
      225.,  226.,  227.,  228.,  229.,  230.,  231.,  232.,  944.,  948.,
      0.,    0.,    0.,    0.,    0.,    0.,    1084., 1088., 1092., 1096.,
      1100., 1104., 1108., 1112., 1116., 1120., 1124., 1128., 4576., 4592.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    321.,  322.,  323.,  324.,
      325.,  326.,  327.,  328.,  329.,  330.,  331.,  332.,  1344., 1348.,
      0.,    0.,    0.,    0.,    0.,    0.,    341.,  342.,  343.,  344.,
      345.,  346.,  347.,  348.,  349.,  350.,  351.,  352.,  1424., 1428.,
      0.,    0.,    0.,    0.,    0.,    0.,    361.,  362.,  363.,  364.,
      365.,  366.,  367.,  368.,  369.,  370.,  371.,  372.,  1504., 1508.,
      0.,    0.,    0.,    0.,    0.,    0.,    381.,  382.,  383.,  384.,
      385.,  386.,  387.,  388.,  389.,  390.,  391.,  392.,  1584., 1588.,
      0.,    0.,    0.,    0.,    0.,    0.,    1724., 1728., 1732., 1736.,
      1740., 1744., 1748., 1752., 1756., 1760., 1764., 1768., 7136., 7152.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  9.,  10.,
      11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  17., 18.,
      19., 20., 21., 22., 23., 24., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  25., 26., 27., 28., 29., 30., 31., 32., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  33., 34., 35., 36., 37., 38., 39., 40., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  41., 42., 43., 44.,
      45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1.,    2.,    3.,    4.,    5.,     6.,     7.,     8.,
      9.,    10.,   11.,   12.,   13.,   14.,   15.,    16.,    17.,    18.,
      19.,   20.,   21.,   22.,   23.,   24.,   124.,   128.,   132.,   136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    41.,   42.,   43.,   44.,   45.,    46.,    47.,    48.,
      49.,   50.,   51.,   52.,   53.,   54.,   55.,    56.,    57.,    58.,
      59.,   60.,   61.,   62.,   63.,   64.,   284.,   288.,   292.,   296.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    81.,   82.,   83.,   84.,   85.,    86.,    87.,    88.,
      89.,   90.,   91.,   92.,   93.,   94.,   95.,    96.,    97.,    98.,
      99.,   100.,  101.,  102.,  103.,  104.,  444.,   448.,   452.,   456.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    121.,  122.,  123.,  124.,  125.,   126.,   127.,   128.,
      129.,  130.,  131.,  132.,  133.,  134.,  135.,   136.,   137.,   138.,
      139.,  140.,  141.,  142.,  143.,  144.,  604.,   608.,   612.,   616.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    884.,  888.,  892.,  896.,  900.,   904.,   908.,   912.,
      916.,  920.,  924.,  928.,  932.,  936.,  940.,   944.,   948.,   952.,
      956.,  960.,  964.,  968.,  972.,  976.,  4016.,  4032.,  4048.,  4064.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    321.,  322.,  323.,  324.,  325.,   326.,   327.,   328.,
      329.,  330.,  331.,  332.,  333.,  334.,  335.,   336.,   337.,   338.,
      339.,  340.,  341.,  342.,  343.,  344.,  1404.,  1408.,  1412.,  1416.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    361.,  362.,  363.,  364.,  365.,   366.,   367.,   368.,
      369.,  370.,  371.,  372.,  373.,  374.,  375.,   376.,   377.,   378.,
      379.,  380.,  381.,  382.,  383.,  384.,  1564.,  1568.,  1572.,  1576.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    401.,  402.,  403.,  404.,  405.,   406.,   407.,   408.,
      409.,  410.,  411.,  412.,  413.,  414.,  415.,   416.,   417.,   418.,
      419.,  420.,  421.,  422.,  423.,  424.,  1724.,  1728.,  1732.,  1736.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    441.,  442.,  443.,  444.,  445.,   446.,   447.,   448.,
      449.,  450.,  451.,  452.,  453.,  454.,  455.,   456.,   457.,   458.,
      459.,  460.,  461.,  462.,  463.,  464.,  1884.,  1888.,  1892.,  1896.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    2164., 2168., 2172., 2176., 2180.,  2184.,  2188.,  2192.,
      2196., 2200., 2204., 2208., 2212., 2216., 2220.,  2224.,  2228.,  2232.,
      2236., 2240., 2244., 2248., 2252., 2256., 9136.,  9152.,  9168.,  9184.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    641.,  642.,  643.,  644.,  645.,   646.,   647.,   648.,
      649.,  650.,  651.,  652.,  653.,  654.,  655.,   656.,   657.,   658.,
      659.,  660.,  661.,  662.,  663.,  664.,  2684.,  2688.,  2692.,  2696.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    681.,  682.,  683.,  684.,  685.,   686.,   687.,   688.,
      689.,  690.,  691.,  692.,  693.,  694.,  695.,   696.,   697.,   698.,
      699.,  700.,  701.,  702.,  703.,  704.,  2844.,  2848.,  2852.,  2856.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    721.,  722.,  723.,  724.,  725.,   726.,   727.,   728.,
      729.,  730.,  731.,  732.,  733.,  734.,  735.,   736.,   737.,   738.,
      739.,  740.,  741.,  742.,  743.,  744.,  3004.,  3008.,  3012.,  3016.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    761.,  762.,  763.,  764.,  765.,   766.,   767.,   768.,
      769.,  770.,  771.,  772.,  773.,  774.,  775.,   776.,   777.,   778.,
      779.,  780.,  781.,  782.,  783.,  784.,  3164.,  3168.,  3172.,  3176.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    3444., 3448., 3452., 3456., 3460.,  3464.,  3468.,  3472.,
      3476., 3480., 3484., 3488., 3492., 3496., 3500.,  3504.,  3508.,  3512.,
      3516., 3520., 3524., 3528., 3532., 3536., 14256., 14272., 14288., 14304.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x8x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,
      3.,  4.,  5.,  6.,  7.,  8.,  9.,  10., 11., 12., 13., 14., 15., 16.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  17., 18., 19., 20.,
      21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33., 34., 35., 36.,
      37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47., 48., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  49., 50., 51., 52., 53., 54.,
      55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  65., 66., 67., 68., 69., 70.,
      71., 72., 73., 74., 75., 76., 77., 78., 79., 80., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  81., 82., 83., 84., 85., 86., 87., 88.,
      89., 90., 91., 92., 93., 94., 95., 96.};
  const std::array<int, 4> in_shape = {{3, 8, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   1.,   2.,   3.,   4.,   26.,  0.,   0.,   0.,   9.,
      10.,  11.,  12.,  58.,  0.,   0.,   0.,   17.,  18.,  19.,  20.,  90.,
      0.,   0.,   0.,   25.,  26.,  27.,  28.,  122., 0.,   0.,   0.,   33.,
      34.,  35.,  36.,  154., 0.,   0.,   0.,   212., 216., 220., 224., 936.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   73.,  74.,  75.,  76.,  314., 0.,   0.,   0.,   81.,
      82.,  83.,  84.,  346., 0.,   0.,   0.,   89.,  90.,  91.,  92.,  378.,
      0.,   0.,   0.,   97.,  98.,  99.,  100., 410., 0.,   0.,   0.,   105.,
      106., 107., 108., 442., 0.,   0.,   0.,   500., 504., 508., 512., 2088.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   145., 146., 147., 148., 602., 0.,   0.,   0.,   153.,
      154., 155., 156., 634., 0.,   0.,   0.,   161., 162., 163., 164., 666.,
      0.,   0.,   0.,   169., 170., 171., 172., 698., 0.,   0.,   0.,   177.,
      178., 179., 180., 730., 0.,   0.,   0.,   788., 792., 796., 800., 3240.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 0., 0., 0., 0., 3.,  4.,
      0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 7.,  8.,
      0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 0., 0., 0., 0., 11., 12.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 13., 14., 0., 0., 0., 0., 0., 0., 15., 16.,
      0., 0., 0., 0., 0., 0., 17., 18.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    1.,    2.,    3.,    4.,    5.,    6.,
      7.,    8.,    48.,   52.,   0.,    0.,    0.,    0.,    0.,    0.,
      17.,   18.,   19.,   20.,   21.,   22.,   23.,   24.,   112.,  116.,
      0.,    0.,    0.,    0.,    0.,    0.,    33.,   34.,   35.,   36.,
      37.,   38.,   39.,   40.,   176.,  180.,  0.,    0.,    0.,    0.,
      0.,    0.,    49.,   50.,   51.,   52.,   53.,   54.,   55.,   56.,
      240.,  244.,  0.,    0.,    0.,    0.,    0.,    0.,    65.,   66.,
      67.,   68.,   69.,   70.,   71.,   72.,   304.,  308.,  0.,    0.,
      0.,    0.,    0.,    0.,    420.,  424.,  428.,  432.,  436.,  440.,
      444.,  448.,  1856., 1872., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    145.,  146.,
      147.,  148.,  149.,  150.,  151.,  152.,  624.,  628.,  0.,    0.,
      0.,    0.,    0.,    0.,    161.,  162.,  163.,  164.,  165.,  166.,
      167.,  168.,  688.,  692.,  0.,    0.,    0.,    0.,    0.,    0.,
      177.,  178.,  179.,  180.,  181.,  182.,  183.,  184.,  752.,  756.,
      0.,    0.,    0.,    0.,    0.,    0.,    193.,  194.,  195.,  196.,
      197.,  198.,  199.,  200.,  816.,  820.,  0.,    0.,    0.,    0.,
      0.,    0.,    209.,  210.,  211.,  212.,  213.,  214.,  215.,  216.,
      880.,  884.,  0.,    0.,    0.,    0.,    0.,    0.,    996.,  1000.,
      1004., 1008., 1012., 1016., 1020., 1024., 4160., 4176., 0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    289.,  290.,  291.,  292.,  293.,  294.,  295.,  296.,
      1200., 1204., 0.,    0.,    0.,    0.,    0.,    0.,    305.,  306.,
      307.,  308.,  309.,  310.,  311.,  312.,  1264., 1268., 0.,    0.,
      0.,    0.,    0.,    0.,    321.,  322.,  323.,  324.,  325.,  326.,
      327.,  328.,  1328., 1332., 0.,    0.,    0.,    0.,    0.,    0.,
      337.,  338.,  339.,  340.,  341.,  342.,  343.,  344.,  1392., 1396.,
      0.,    0.,    0.,    0.,    0.,    0.,    353.,  354.,  355.,  356.,
      357.,  358.,  359.,  360.,  1456., 1460., 0.,    0.,    0.,    0.,
      0.,    0.,    1572., 1576., 1580., 1584., 1588., 1592., 1596., 1600.,
      6464., 6480.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 29., 30., 31., 32.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 35., 36.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    1.,    2.,
      3.,     4.,     5.,     6.,    7.,    8.,    9.,    10.,   11.,   12.,
      13.,    14.,    15.,    16.,   92.,   96.,   100.,  104.,  0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      33.,    34.,    35.,    36.,   37.,   38.,   39.,   40.,   41.,   42.,
      43.,    44.,    45.,    46.,   47.,   48.,   220.,  224.,  228.,  232.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     65.,    66.,   67.,   68.,   69.,   70.,   71.,   72.,
      73.,    74.,    75.,    76.,   77.,   78.,   79.,   80.,   348.,  352.,
      356.,   360.,   0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    97.,   98.,   99.,   100.,  101.,  102.,
      103.,   104.,   105.,   106.,  107.,  108.,  109.,  110.,  111.,  112.,
      476.,   480.,   484.,   488.,  0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    129.,  130.,  131.,  132.,
      133.,   134.,   135.,   136.,  137.,  138.,  139.,  140.,  141.,  142.,
      143.,   144.,   604.,   608.,  612.,  616.,  0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    836.,  840.,
      844.,   848.,   852.,   856.,  860.,  864.,  868.,  872.,  876.,  880.,
      884.,   888.,   892.,   896.,  3696., 3712., 3728., 3744., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    289.,  290.,  291.,  292.,
      293.,   294.,   295.,   296.,  297.,  298.,  299.,  300.,  301.,  302.,
      303.,   304.,   1244.,  1248., 1252., 1256., 0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    321.,  322.,
      323.,   324.,   325.,   326.,  327.,  328.,  329.,  330.,  331.,  332.,
      333.,   334.,   335.,   336.,  1372., 1376., 1380., 1384., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      353.,   354.,   355.,   356.,  357.,  358.,  359.,  360.,  361.,  362.,
      363.,   364.,   365.,   366.,  367.,  368.,  1500., 1504., 1508., 1512.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     385.,   386.,  387.,  388.,  389.,  390.,  391.,  392.,
      393.,   394.,   395.,   396.,  397.,  398.,  399.,  400.,  1628., 1632.,
      1636.,  1640.,  0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    417.,  418.,  419.,  420.,  421.,  422.,
      423.,   424.,   425.,   426.,  427.,  428.,  429.,  430.,  431.,  432.,
      1756.,  1760.,  1764.,  1768., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    1988., 1992., 1996., 2000.,
      2004.,  2008.,  2012.,  2016., 2020., 2024., 2028., 2032., 2036., 2040.,
      2044.,  2048.,  8304.,  8320., 8336., 8352., 0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    577.,  578.,  579.,  580.,  581.,  582.,
      583.,   584.,   585.,   586.,  587.,  588.,  589.,  590.,  591.,  592.,
      2396.,  2400.,  2404.,  2408., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    609.,  610.,  611.,  612.,
      613.,   614.,   615.,   616.,  617.,  618.,  619.,  620.,  621.,  622.,
      623.,   624.,   2524.,  2528., 2532., 2536., 0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    641.,  642.,
      643.,   644.,   645.,   646.,  647.,  648.,  649.,  650.,  651.,  652.,
      653.,   654.,   655.,   656.,  2652., 2656., 2660., 2664., 0.,    0.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      673.,   674.,   675.,   676.,  677.,  678.,  679.,  680.,  681.,  682.,
      683.,   684.,   685.,   686.,  687.,  688.,  2780., 2784., 2788., 2792.,
      0.,     0.,     0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     705.,   706.,  707.,  708.,  709.,  710.,  711.,  712.,
      713.,   714.,   715.,   716.,  717.,  718.,  719.,  720.,  2908., 2912.,
      2916.,  2920.,  0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,     0.,     0.,     0.,    3140., 3144., 3148., 3152., 3156., 3160.,
      3164.,  3168.,  3172.,  3176., 3180., 3184., 3188., 3192., 3196., 3200.,
      12912., 12928., 12944., 12960.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28., 29., 30., 31., 32.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 35., 36., 37., 38., 39., 40.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 41., 42., 43., 44., 45., 46., 47., 48.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 49., 50., 51., 52., 53., 54., 55., 56.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 57., 58., 59., 60., 61., 62., 63., 64.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 65., 66., 67., 68., 69., 70., 71., 72.};
  const std::array<int, 4> in_shape = {{3, 9, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    1.,   2.,   3.,    4.,   5.,   30.,
      0.,   0.,   0.,   10.,  11.,  12.,   13.,  14.,  66.,   0.,   0.,   0.,
      19.,  20.,  21.,  22.,  23.,  102.,  0.,   0.,   0.,    28.,  29.,  30.,
      31.,  32.,  138., 0.,   0.,   0.,    37.,  38.,  39.,   40.,  41.,  174.,
      0.,   0.,   0.,   238., 242., 246.,  250., 254., 1056., 0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   82.,  83.,  84.,   85.,  86.,  354.,  0.,   0.,   0.,
      91.,  92.,  93.,  94.,  95.,  390.,  0.,   0.,   0.,    100., 101., 102.,
      103., 104., 426., 0.,   0.,   0.,    109., 110., 111.,  112., 113., 462.,
      0.,   0.,   0.,   118., 119., 120.,  121., 122., 498.,  0.,   0.,   0.,
      562., 566., 570., 574., 578., 2352., 0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,
      163., 164., 165., 166., 167., 678.,  0.,   0.,   0.,    172., 173., 174.,
      175., 176., 714., 0.,   0.,   0.,    181., 182., 183.,  184., 185., 750.,
      0.,   0.,   0.,   190., 191., 192.,  193., 194., 786.,  0.,   0.,   0.,
      199., 200., 201., 202., 203., 822.,  0.,   0.,   0.,    886., 890., 894.,
      898., 902., 3648.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 1., 2.,  3.,  0.,
      0.,  0.,  0., 0., 0., 4., 5.,  6.,  0.,  0.,  0., 0., 0., 0.,  7.,  8.,
      9.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 10., 11., 12.,
      0.,  0.,  0., 0., 0., 0., 13., 14., 15., 0.,  0., 0., 0., 0.,  0.,  16.,
      17., 18., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,
      0.,  0.,  0., 0., 0., 0., 0.,  0.,  0.,  0.,  0., 0., 0., 0.,  19., 20.,
      21., 0.,  0., 0., 0., 0., 0.,  22., 23., 24., 0., 0., 0., 0.,  0.,  0.,
      25., 26., 27.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,    10.,
      56.,   60.,   0.,    0.,    0.,    0.,    0.,    0.,    19.,   20.,
      21.,   22.,   23.,   24.,   25.,   26.,   27.,   28.,   128.,  132.,
      0.,    0.,    0.,    0.,    0.,    0.,    37.,   38.,   39.,   40.,
      41.,   42.,   43.,   44.,   45.,   46.,   200.,  204.,  0.,    0.,
      0.,    0.,    0.,    0.,    55.,   56.,   57.,   58.,   59.,   60.,
      61.,   62.,   63.,   64.,   272.,  276.,  0.,    0.,    0.,    0.,
      0.,    0.,    73.,   74.,   75.,   76.,   77.,   78.,   79.,   80.,
      81.,   82.,   344.,  348.,  0.,    0.,    0.,    0.,    0.,    0.,
      472.,  476.,  480.,  484.,  488.,  492.,  496.,  500.,  504.,  508.,
      2096., 2112., 0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    163.,  164.,  165.,  166.,  167.,  168.,  169.,  170.,
      171.,  172.,  704.,  708.,  0.,    0.,    0.,    0.,    0.,    0.,
      181.,  182.,  183.,  184.,  185.,  186.,  187.,  188.,  189.,  190.,
      776.,  780.,  0.,    0.,    0.,    0.,    0.,    0.,    199.,  200.,
      201.,  202.,  203.,  204.,  205.,  206.,  207.,  208.,  848.,  852.,
      0.,    0.,    0.,    0.,    0.,    0.,    217.,  218.,  219.,  220.,
      221.,  222.,  223.,  224.,  225.,  226.,  920.,  924.,  0.,    0.,
      0.,    0.,    0.,    0.,    235.,  236.,  237.,  238.,  239.,  240.,
      241.,  242.,  243.,  244.,  992.,  996.,  0.,    0.,    0.,    0.,
      0.,    0.,    1120., 1124., 1128., 1132., 1136., 1140., 1144., 1148.,
      1152., 1156., 4688., 4704., 0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    325.,  326.,  327.,  328.,  329.,  330.,
      331.,  332.,  333.,  334.,  1352., 1356., 0.,    0.,    0.,    0.,
      0.,    0.,    343.,  344.,  345.,  346.,  347.,  348.,  349.,  350.,
      351.,  352.,  1424., 1428., 0.,    0.,    0.,    0.,    0.,    0.,
      361.,  362.,  363.,  364.,  365.,  366.,  367.,  368.,  369.,  370.,
      1496., 1500., 0.,    0.,    0.,    0.,    0.,    0.,    379.,  380.,
      381.,  382.,  383.,  384.,  385.,  386.,  387.,  388.,  1568., 1572.,
      0.,    0.,    0.,    0.,    0.,    0.,    397.,  398.,  399.,  400.,
      401.,  402.,  403.,  404.,  405.,  406.,  1640., 1644., 0.,    0.,
      0.,    0.,    0.,    0.,    1768., 1772., 1776., 1780., 1784., 1788.,
      1792., 1796., 1800., 1804., 7280., 7296.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 1., 2., 3.,  4.,  5.,  6.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 7.,  8.,  9.,  10., 11., 12.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  13., 14., 15., 16.,
      17., 18., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 19., 20., 21., 22., 23., 24.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  25., 26., 27., 28.,
      29., 30., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  31., 32.,
      33., 34., 35., 36., 0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  37., 38., 39., 40.,
      41., 42., 0.,  0.,  0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  43., 44.,
      45., 46., 47., 48., 0.,  0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      49., 50., 51., 52., 53., 54.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      1.,     2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,     10.,
      11.,    12.,   13.,   14.,   15.,   16.,   17.,   18.,   19.,    20.,
      108.,   112.,  116.,  120.,  0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    37.,   38.,   39.,    40.,
      41.,    42.,   43.,   44.,   45.,   46.,   47.,   48.,   49.,    50.,
      51.,    52.,   53.,   54.,   55.,   56.,   252.,  256.,  260.,   264.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    73.,   74.,   75.,   76.,   77.,   78.,   79.,    80.,
      81.,    82.,   83.,   84.,   85.,   86.,   87.,   88.,   89.,    90.,
      91.,    92.,   396.,  400.,  404.,  408.,  0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    109.,   110.,
      111.,   112.,  113.,  114.,  115.,  116.,  117.,  118.,  119.,   120.,
      121.,   122.,  123.,  124.,  125.,  126.,  127.,  128.,  540.,   544.,
      548.,   552.,  0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    145.,  146.,  147.,  148.,  149.,   150.,
      151.,   152.,  153.,  154.,  155.,  156.,  157.,  158.,  159.,   160.,
      161.,   162.,  163.,  164.,  684.,  688.,  692.,  696.,  0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      940.,   944.,  948.,  952.,  956.,  960.,  964.,  968.,  972.,   976.,
      980.,   984.,  988.,  992.,  996.,  1000., 1004., 1008., 1012.,  1016.,
      4176.,  4192., 4208., 4224., 0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    325.,  326.,  327.,  328.,  329.,   330.,
      331.,   332.,  333.,  334.,  335.,  336.,  337.,  338.,  339.,   340.,
      341.,   342.,  343.,  344.,  1404., 1408., 1412., 1416., 0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      361.,   362.,  363.,  364.,  365.,  366.,  367.,  368.,  369.,   370.,
      371.,   372.,  373.,  374.,  375.,  376.,  377.,  378.,  379.,   380.,
      1548.,  1552., 1556., 1560., 0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    397.,  398.,  399.,   400.,
      401.,   402.,  403.,  404.,  405.,  406.,  407.,  408.,  409.,   410.,
      411.,   412.,  413.,  414.,  415.,  416.,  1692., 1696., 1700.,  1704.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    433.,  434.,  435.,  436.,  437.,  438.,  439.,   440.,
      441.,   442.,  443.,  444.,  445.,  446.,  447.,  448.,  449.,   450.,
      451.,   452.,  1836., 1840., 1844., 1848., 0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    469.,   470.,
      471.,   472.,  473.,  474.,  475.,  476.,  477.,  478.,  479.,   480.,
      481.,   482.,  483.,  484.,  485.,  486.,  487.,  488.,  1980.,  1984.,
      1988.,  1992., 0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    2236., 2240., 2244., 2248., 2252.,  2256.,
      2260.,  2264., 2268., 2272., 2276., 2280., 2284., 2288., 2292.,  2296.,
      2300.,  2304., 2308., 2312., 9360., 9376., 9392., 9408., 0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    649.,   650.,
      651.,   652.,  653.,  654.,  655.,  656.,  657.,  658.,  659.,   660.,
      661.,   662.,  663.,  664.,  665.,  666.,  667.,  668.,  2700.,  2704.,
      2708.,  2712., 0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    685.,  686.,  687.,  688.,  689.,   690.,
      691.,   692.,  693.,  694.,  695.,  696.,  697.,  698.,  699.,   700.,
      701.,   702.,  703.,  704.,  2844., 2848., 2852., 2856., 0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      721.,   722.,  723.,  724.,  725.,  726.,  727.,  728.,  729.,   730.,
      731.,   732.,  733.,  734.,  735.,  736.,  737.,  738.,  739.,   740.,
      2988.,  2992., 2996., 3000., 0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    757.,  758.,  759.,   760.,
      761.,   762.,  763.,  764.,  765.,  766.,  767.,  768.,  769.,   770.,
      771.,   772.,  773.,  774.,  775.,  776.,  3132., 3136., 3140.,  3144.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,
      0.,     0.,    793.,  794.,  795.,  796.,  797.,  798.,  799.,   800.,
      801.,   802.,  803.,  804.,  805.,  806.,  807.,  808.,  809.,   810.,
      811.,   812.,  3276., 3280., 3284., 3288., 0.,    0.,    0.,     0.,
      0.,     0.,    0.,    0.,    0.,    0.,    0.,    0.,    3532.,  3536.,
      3540.,  3544., 3548., 3552., 3556., 3560., 3564., 3568., 3572.,  3576.,
      3580.,  3584., 3588., 3592., 3596., 3600., 3604., 3608., 14544., 14560.,
      14576., 14592.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   1.,   2.,   3.,   4.,  5.,  6.,  7.,
      8.,  9.,   10.,  11.,  12.,  0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   13.,  14.,  15.,  16.,  17.,  18.,  19., 20., 21., 22.,
      23., 24.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      25., 26.,  27.,  28.,  29.,  30.,  31.,  32.,  33.,  34., 35., 36., 0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   37.,  38.,  39.,  40.,  41., 42., 43., 44.,
      45., 46.,  47.,  48.,  0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   49.,  50.,  51.,  52.,  53.,  54.,  55.,  56., 57., 58., 59.,
      60., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  61.,
      62., 63.,  64.,  65.,  66.,  67.,  68.,  69.,  70.,  71., 72., 0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   73.,  74.,  75.,  76.,  77.,  78., 79., 80., 81.,
      82., 83.,  84.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  85.,  86.,  87.,  88.,  89.,  90.,  91.,  92.,  93., 94., 95., 96.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  0.,  0.,
      0.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  0.,  97., 98.,
      99., 100., 101., 102., 103., 104., 105., 106., 107., 108.};
  const std::array<int, 4> in_shape = {{3, 9, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,    3.,   4.,    5.,    6.,   34.,  0.,   0.,   0.,   11.,
      12.,  13.,   14.,  15.,   16.,   74.,  0.,   0.,   0.,   21.,  22.,
      23.,  24.,   25.,  26.,   114.,  0.,   0.,   0.,   31.,  32.,  33.,
      34.,  35.,   36.,  154.,  0.,    0.,   0.,   41.,  42.,  43.,  44.,
      45.,  46.,   194., 0.,    0.,    0.,   264., 268., 272., 276., 280.,
      284., 1176., 0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    91.,  92.,   93.,   94.,  95.,  96.,  394., 0.,   0.,
      0.,   101.,  102., 103.,  104.,  105., 106., 434., 0.,   0.,   0.,
      111., 112.,  113., 114.,  115.,  116., 474., 0.,   0.,   0.,   121.,
      122., 123.,  124., 125.,  126.,  514., 0.,   0.,   0.,   131., 132.,
      133., 134.,  135., 136.,  554.,  0.,   0.,   0.,   624., 628., 632.,
      636., 640.,  644., 2616., 0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,   0.,    181.,  182., 183., 184., 185., 186., 754.,
      0.,   0.,    0.,   191.,  192.,  193., 194., 195., 196., 794., 0.,
      0.,   0.,    201., 202.,  203.,  204., 205., 206., 834., 0.,   0.,
      0.,   211.,  212., 213.,  214.,  215., 216., 874., 0.,   0.,   0.,
      221., 222.,  223., 224.,  225.,  226., 914., 0.,   0.,   0.,   984.,
      988., 992.,  996., 1000., 1004., 4056.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 1.,  2.,  3.,  4.,  0., 0.,  0.,  0.,  0.,
      0., 5.,  6.,  7.,  8.,  0., 0.,  0.,  0.,  0.,  0., 9.,  10., 11., 12.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 13., 14., 15., 16., 0., 0.,  0.,  0.,  0.,
      0., 17., 18., 19., 20., 0., 0.,  0.,  0.,  0.,  0., 21., 22., 23., 24.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 25., 26., 27., 28., 0., 0.,  0.,  0.,  0.,
      0., 29., 30., 31., 32., 0., 0.,  0.,  0.,  0.,  0., 33., 34., 35., 36.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    1.,    2.,    3.,    4.,
      5.,    6.,    7.,    8.,    9.,    10.,   11.,   12.,   64.,   68.,
      0.,    0.,    0.,    0.,    0.,    0.,    21.,   22.,   23.,   24.,
      25.,   26.,   27.,   28.,   29.,   30.,   31.,   32.,   144.,  148.,
      0.,    0.,    0.,    0.,    0.,    0.,    41.,   42.,   43.,   44.,
      45.,   46.,   47.,   48.,   49.,   50.,   51.,   52.,   224.,  228.,
      0.,    0.,    0.,    0.,    0.,    0.,    61.,   62.,   63.,   64.,
      65.,   66.,   67.,   68.,   69.,   70.,   71.,   72.,   304.,  308.,
      0.,    0.,    0.,    0.,    0.,    0.,    81.,   82.,   83.,   84.,
      85.,   86.,   87.,   88.,   89.,   90.,   91.,   92.,   384.,  388.,
      0.,    0.,    0.,    0.,    0.,    0.,    524.,  528.,  532.,  536.,
      540.,  544.,  548.,  552.,  556.,  560.,  564.,  568.,  2336., 2352.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    181.,  182.,  183.,  184.,
      185.,  186.,  187.,  188.,  189.,  190.,  191.,  192.,  784.,  788.,
      0.,    0.,    0.,    0.,    0.,    0.,    201.,  202.,  203.,  204.,
      205.,  206.,  207.,  208.,  209.,  210.,  211.,  212.,  864.,  868.,
      0.,    0.,    0.,    0.,    0.,    0.,    221.,  222.,  223.,  224.,
      225.,  226.,  227.,  228.,  229.,  230.,  231.,  232.,  944.,  948.,
      0.,    0.,    0.,    0.,    0.,    0.,    241.,  242.,  243.,  244.,
      245.,  246.,  247.,  248.,  249.,  250.,  251.,  252.,  1024., 1028.,
      0.,    0.,    0.,    0.,    0.,    0.,    261.,  262.,  263.,  264.,
      265.,  266.,  267.,  268.,  269.,  270.,  271.,  272.,  1104., 1108.,
      0.,    0.,    0.,    0.,    0.,    0.,    1244., 1248., 1252., 1256.,
      1260., 1264., 1268., 1272., 1276., 1280., 1284., 1288., 5216., 5232.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    361.,  362.,  363.,  364.,
      365.,  366.,  367.,  368.,  369.,  370.,  371.,  372.,  1504., 1508.,
      0.,    0.,    0.,    0.,    0.,    0.,    381.,  382.,  383.,  384.,
      385.,  386.,  387.,  388.,  389.,  390.,  391.,  392.,  1584., 1588.,
      0.,    0.,    0.,    0.,    0.,    0.,    401.,  402.,  403.,  404.,
      405.,  406.,  407.,  408.,  409.,  410.,  411.,  412.,  1664., 1668.,
      0.,    0.,    0.,    0.,    0.,    0.,    421.,  422.,  423.,  424.,
      425.,  426.,  427.,  428.,  429.,  430.,  431.,  432.,  1744., 1748.,
      0.,    0.,    0.,    0.,    0.,    0.,    441.,  442.,  443.,  444.,
      445.,  446.,  447.,  448.,  449.,  450.,  451.,  452.,  1824., 1828.,
      0.,    0.,    0.,    0.,    0.,    0.,    1964., 1968., 1972., 1976.,
      1980., 1984., 1988., 1992., 1996., 2000., 2004., 2008., 8096., 8112.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  9.,  10.,
      11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  25., 26., 27., 28., 29., 30., 31., 32., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33., 34., 35., 36.,
      37., 38., 39., 40., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  41., 42., 43., 44., 45., 46., 47., 48., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  49., 50., 51., 52., 53., 54., 55., 56., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  57., 58., 59., 60., 61., 62.,
      63., 64., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      65., 66., 67., 68., 69., 70., 71., 72.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x9x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1.,    2.,    3.,    4.,    5.,     6.,     7.,     8.,
      9.,    10.,   11.,   12.,   13.,   14.,   15.,    16.,    17.,    18.,
      19.,   20.,   21.,   22.,   23.,   24.,   124.,   128.,   132.,   136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    41.,   42.,   43.,   44.,   45.,    46.,    47.,    48.,
      49.,   50.,   51.,   52.,   53.,   54.,   55.,    56.,    57.,    58.,
      59.,   60.,   61.,   62.,   63.,   64.,   284.,   288.,   292.,   296.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    81.,   82.,   83.,   84.,   85.,    86.,    87.,    88.,
      89.,   90.,   91.,   92.,   93.,   94.,   95.,    96.,    97.,    98.,
      99.,   100.,  101.,  102.,  103.,  104.,  444.,   448.,   452.,   456.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    121.,  122.,  123.,  124.,  125.,   126.,   127.,   128.,
      129.,  130.,  131.,  132.,  133.,  134.,  135.,   136.,   137.,   138.,
      139.,  140.,  141.,  142.,  143.,  144.,  604.,   608.,   612.,   616.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    161.,  162.,  163.,  164.,  165.,   166.,   167.,   168.,
      169.,  170.,  171.,  172.,  173.,  174.,  175.,   176.,   177.,   178.,
      179.,  180.,  181.,  182.,  183.,  184.,  764.,   768.,   772.,   776.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1044., 1048., 1052., 1056., 1060.,  1064.,  1068.,  1072.,
      1076., 1080., 1084., 1088., 1092., 1096., 1100.,  1104.,  1108.,  1112.,
      1116., 1120., 1124., 1128., 1132., 1136., 4656.,  4672.,  4688.,  4704.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    361.,  362.,  363.,  364.,  365.,   366.,   367.,   368.,
      369.,  370.,  371.,  372.,  373.,  374.,  375.,   376.,   377.,   378.,
      379.,  380.,  381.,  382.,  383.,  384.,  1564.,  1568.,  1572.,  1576.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    401.,  402.,  403.,  404.,  405.,   406.,   407.,   408.,
      409.,  410.,  411.,  412.,  413.,  414.,  415.,   416.,   417.,   418.,
      419.,  420.,  421.,  422.,  423.,  424.,  1724.,  1728.,  1732.,  1736.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    441.,  442.,  443.,  444.,  445.,   446.,   447.,   448.,
      449.,  450.,  451.,  452.,  453.,  454.,  455.,   456.,   457.,   458.,
      459.,  460.,  461.,  462.,  463.,  464.,  1884.,  1888.,  1892.,  1896.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    481.,  482.,  483.,  484.,  485.,   486.,   487.,   488.,
      489.,  490.,  491.,  492.,  493.,  494.,  495.,   496.,   497.,   498.,
      499.,  500.,  501.,  502.,  503.,  504.,  2044.,  2048.,  2052.,  2056.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    521.,  522.,  523.,  524.,  525.,   526.,   527.,   528.,
      529.,  530.,  531.,  532.,  533.,  534.,  535.,   536.,   537.,   538.,
      539.,  540.,  541.,  542.,  543.,  544.,  2204.,  2208.,  2212.,  2216.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    2484., 2488., 2492., 2496., 2500.,  2504.,  2508.,  2512.,
      2516., 2520., 2524., 2528., 2532., 2536., 2540.,  2544.,  2548.,  2552.,
      2556., 2560., 2564., 2568., 2572., 2576., 10416., 10432., 10448., 10464.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    721.,  722.,  723.,  724.,  725.,   726.,   727.,   728.,
      729.,  730.,  731.,  732.,  733.,  734.,  735.,   736.,   737.,   738.,
      739.,  740.,  741.,  742.,  743.,  744.,  3004.,  3008.,  3012.,  3016.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    761.,  762.,  763.,  764.,  765.,   766.,   767.,   768.,
      769.,  770.,  771.,  772.,  773.,  774.,  775.,   776.,   777.,   778.,
      779.,  780.,  781.,  782.,  783.,  784.,  3164.,  3168.,  3172.,  3176.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    801.,  802.,  803.,  804.,  805.,   806.,   807.,   808.,
      809.,  810.,  811.,  812.,  813.,  814.,  815.,   816.,   817.,   818.,
      819.,  820.,  821.,  822.,  823.,  824.,  3324.,  3328.,  3332.,  3336.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    841.,  842.,  843.,  844.,  845.,   846.,   847.,   848.,
      849.,  850.,  851.,  852.,  853.,  854.,  855.,   856.,   857.,   858.,
      859.,  860.,  861.,  862.,  863.,  864.,  3484.,  3488.,  3492.,  3496.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    881.,  882.,  883.,  884.,  885.,   886.,   887.,   888.,
      889.,  890.,  891.,  892.,  893.,  894.,  895.,   896.,   897.,   898.,
      899.,  900.,  901.,  902.,  903.,  904.,  3644.,  3648.,  3652.,  3656.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    3924., 3928., 3932., 3936., 3940.,  3944.,  3948.,  3952.,
      3956., 3960., 3964., 3968., 3972., 3976., 3980.,  3984.,  3988.,  3992.,
      3996., 4000., 4004., 4008., 4012., 4016., 16176., 16192., 16208., 16224.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x9x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,  12.,
      13.,  14.,  15.,  16.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  21.,  22.,  23.,  24.,
      25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   33.,  34.,  35.,  36.,
      37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      49.,  50.,  51.,  52.,  53.,  54.,  55.,  56.,  57.,  58.,  59.,  60.,
      61.,  62.,  63.,  64.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   65.,  66.,  67.,  68.,  69.,  70.,  71.,  72.,
      73.,  74.,  75.,  76.,  77.,  78.,  79.,  80.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,
      85.,  86.,  87.,  88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      97.,  98.,  99.,  100., 101., 102., 103., 104., 105., 106., 107., 108.,
      109., 110., 111., 112., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   113., 114., 115., 116., 117., 118., 119., 120.,
      121., 122., 123., 124., 125., 126., 127., 128., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   129., 130., 131., 132.,
      133., 134., 135., 136., 137., 138., 139., 140., 141., 142., 143., 144.};
  const std::array<int, 4> in_shape = {{3, 9, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   1.,    2.,   3.,   4.,   26.,  0.,
      0.,   0.,   9.,    10.,  11.,  12.,   58.,  0.,   0.,   0.,   17.,
      18.,  19.,  20.,   90.,  0.,   0.,    0.,   25.,  26.,  27.,  28.,
      122., 0.,   0.,    0.,   33.,  34.,   35.,  36.,  154., 0.,   0.,
      0.,   41.,  42.,   43.,  44.,  186.,  0.,   0.,   0.,   244., 248.,
      252., 256., 1064., 0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   81.,  82.,  83.,
      84.,  346., 0.,    0.,   0.,   89.,   90.,  91.,  92.,  378., 0.,
      0.,   0.,   97.,   98.,  99.,  100.,  410., 0.,   0.,   0.,   105.,
      106., 107., 108.,  442., 0.,   0.,    0.,   113., 114., 115., 116.,
      474., 0.,   0.,    0.,   121., 122.,  123., 124., 506., 0.,   0.,
      0.,   564., 568.,  572., 576., 2344., 0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,    0.,   0.,   0.,    0.,   0.,   0.,   0.,   0.,
      161., 162., 163.,  164., 666., 0.,    0.,   0.,   169., 170., 171.,
      172., 698., 0.,    0.,   0.,   177.,  178., 179., 180., 730., 0.,
      0.,   0.,   185.,  186., 187., 188.,  762., 0.,   0.,   0.,   193.,
      194., 195., 196.,  794., 0.,   0.,    0.,   201., 202., 203., 204.,
      826., 0.,   0.,    0.,   884., 888.,  892., 896., 3624.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x8x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 1.,  2.,  0., 0., 0., 0., 0., 0., 3.,  4.,
      0., 0., 0., 0., 0., 0., 5.,  6.,  0., 0., 0., 0., 0., 0., 7.,  8.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 9.,  10., 0., 0., 0., 0., 0., 0., 11., 12.,
      0., 0., 0., 0., 0., 0., 13., 14., 0., 0., 0., 0., 0., 0., 15., 16.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 0.,  0.,  0., 0., 0., 0., 0., 0., 0.,  0.,
      0., 0., 0., 0., 0., 0., 17., 18., 0., 0., 0., 0., 0., 0., 19., 20.,
      0., 0., 0., 0., 0., 0., 21., 22., 0., 0., 0., 0., 0., 0., 23., 24.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    1.,    2.,    3.,    4.,    5.,    6.,
      7.,    8.,    48.,   52.,   0.,    0.,    0.,    0.,    0.,    0.,
      17.,   18.,   19.,   20.,   21.,   22.,   23.,   24.,   112.,  116.,
      0.,    0.,    0.,    0.,    0.,    0.,    33.,   34.,   35.,   36.,
      37.,   38.,   39.,   40.,   176.,  180.,  0.,    0.,    0.,    0.,
      0.,    0.,    49.,   50.,   51.,   52.,   53.,   54.,   55.,   56.,
      240.,  244.,  0.,    0.,    0.,    0.,    0.,    0.,    65.,   66.,
      67.,   68.,   69.,   70.,   71.,   72.,   304.,  308.,  0.,    0.,
      0.,    0.,    0.,    0.,    81.,   82.,   83.,   84.,   85.,   86.,
      87.,   88.,   368.,  372.,  0.,    0.,    0.,    0.,    0.,    0.,
      484.,  488.,  492.,  496.,  500.,  504.,  508.,  512.,  2112., 2128.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    161.,  162.,  163.,  164.,  165.,  166.,
      167.,  168.,  688.,  692.,  0.,    0.,    0.,    0.,    0.,    0.,
      177.,  178.,  179.,  180.,  181.,  182.,  183.,  184.,  752.,  756.,
      0.,    0.,    0.,    0.,    0.,    0.,    193.,  194.,  195.,  196.,
      197.,  198.,  199.,  200.,  816.,  820.,  0.,    0.,    0.,    0.,
      0.,    0.,    209.,  210.,  211.,  212.,  213.,  214.,  215.,  216.,
      880.,  884.,  0.,    0.,    0.,    0.,    0.,    0.,    225.,  226.,
      227.,  228.,  229.,  230.,  231.,  232.,  944.,  948.,  0.,    0.,
      0.,    0.,    0.,    0.,    241.,  242.,  243.,  244.,  245.,  246.,
      247.,  248.,  1008., 1012., 0.,    0.,    0.,    0.,    0.,    0.,
      1124., 1128., 1132., 1136., 1140., 1144., 1148., 1152., 4672., 4688.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    321.,  322.,  323.,  324.,  325.,  326.,
      327.,  328.,  1328., 1332., 0.,    0.,    0.,    0.,    0.,    0.,
      337.,  338.,  339.,  340.,  341.,  342.,  343.,  344.,  1392., 1396.,
      0.,    0.,    0.,    0.,    0.,    0.,    353.,  354.,  355.,  356.,
      357.,  358.,  359.,  360.,  1456., 1460., 0.,    0.,    0.,    0.,
      0.,    0.,    369.,  370.,  371.,  372.,  373.,  374.,  375.,  376.,
      1520., 1524., 0.,    0.,    0.,    0.,    0.,    0.,    385.,  386.,
      387.,  388.,  389.,  390.,  391.,  392.,  1584., 1588., 0.,    0.,
      0.,    0.,    0.,    0.,    401.,  402.,  403.,  404.,  405.,  406.,
      407.,  408.,  1648., 1652., 0.,    0.,    0.,    0.,    0.,    0.,
      1764., 1768., 1772., 1776., 1780., 1784., 1788., 1792., 7232., 7248.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x8x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 29., 30., 31., 32.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 35., 36.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 37., 38., 39., 40.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 41., 42., 43., 44.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     1.,     2.,
      3.,    4.,    5.,    6.,    7.,    8.,    9.,     10.,    11.,    12.,
      13.,   14.,   15.,   16.,   92.,   96.,   100.,   104.,   0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      33.,   34.,   35.,   36.,   37.,   38.,   39.,    40.,    41.,    42.,
      43.,   44.,   45.,   46.,   47.,   48.,   220.,   224.,   228.,   232.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    65.,   66.,   67.,   68.,   69.,    70.,    71.,    72.,
      73.,   74.,   75.,   76.,   77.,   78.,   79.,    80.,    348.,   352.,
      356.,  360.,  0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    97.,   98.,   99.,    100.,   101.,   102.,
      103.,  104.,  105.,  106.,  107.,  108.,  109.,   110.,   111.,   112.,
      476.,  480.,  484.,  488.,  0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    129.,   130.,   131.,   132.,
      133.,  134.,  135.,  136.,  137.,  138.,  139.,   140.,   141.,   142.,
      143.,  144.,  604.,  608.,  612.,  616.,  0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     161.,   162.,
      163.,  164.,  165.,  166.,  167.,  168.,  169.,   170.,   171.,   172.,
      173.,  174.,  175.,  176.,  732.,  736.,  740.,   744.,   0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      964.,  968.,  972.,  976.,  980.,  984.,  988.,   992.,   996.,   1000.,
      1004., 1008., 1012., 1016., 1020., 1024., 4208.,  4224.,  4240.,  4256.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     321.,   322.,
      323.,  324.,  325.,  326.,  327.,  328.,  329.,   330.,   331.,   332.,
      333.,  334.,  335.,  336.,  1372., 1376., 1380.,  1384.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      353.,  354.,  355.,  356.,  357.,  358.,  359.,   360.,   361.,   362.,
      363.,  364.,  365.,  366.,  367.,  368.,  1500.,  1504.,  1508.,  1512.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    385.,  386.,  387.,  388.,  389.,   390.,   391.,   392.,
      393.,  394.,  395.,  396.,  397.,  398.,  399.,   400.,   1628.,  1632.,
      1636., 1640., 0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    417.,  418.,  419.,   420.,   421.,   422.,
      423.,  424.,  425.,  426.,  427.,  428.,  429.,   430.,   431.,   432.,
      1756., 1760., 1764., 1768., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    449.,   450.,   451.,   452.,
      453.,  454.,  455.,  456.,  457.,  458.,  459.,   460.,   461.,   462.,
      463.,  464.,  1884., 1888., 1892., 1896., 0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     481.,   482.,
      483.,  484.,  485.,  486.,  487.,  488.,  489.,   490.,   491.,   492.,
      493.,  494.,  495.,  496.,  2012., 2016., 2020.,  2024.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      2244., 2248., 2252., 2256., 2260., 2264., 2268.,  2272.,  2276.,  2280.,
      2284., 2288., 2292., 2296., 2300., 2304., 9328.,  9344.,  9360.,  9376.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     641.,   642.,
      643.,  644.,  645.,  646.,  647.,  648.,  649.,   650.,   651.,   652.,
      653.,  654.,  655.,  656.,  2652., 2656., 2660.,  2664.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      673.,  674.,  675.,  676.,  677.,  678.,  679.,   680.,   681.,   682.,
      683.,  684.,  685.,  686.,  687.,  688.,  2780.,  2784.,  2788.,  2792.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    705.,  706.,  707.,  708.,  709.,   710.,   711.,   712.,
      713.,  714.,  715.,  716.,  717.,  718.,  719.,   720.,   2908.,  2912.,
      2916., 2920., 0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    737.,  738.,  739.,   740.,   741.,   742.,
      743.,  744.,  745.,  746.,  747.,  748.,  749.,   750.,   751.,   752.,
      3036., 3040., 3044., 3048., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    769.,   770.,   771.,   772.,
      773.,  774.,  775.,  776.,  777.,  778.,  779.,   780.,   781.,   782.,
      783.,  784.,  3164., 3168., 3172., 3176., 0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     801.,   802.,
      803.,  804.,  805.,  806.,  807.,  808.,  809.,   810.,   811.,   812.,
      813.,  814.,  815.,  816.,  3292., 3296., 3300.,  3304.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      3524., 3528., 3532., 3536., 3540., 3544., 3548.,  3552.,  3556.,  3560.,
      3564., 3568., 3572., 3576., 3580., 3584., 14448., 14464., 14480., 14496.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x8x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 9.,  10., 11., 12., 13., 14., 15., 16.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 17., 18., 19., 20., 21., 22., 23., 24.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 25., 26., 27., 28., 29., 30., 31., 32.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 33., 34., 35., 36., 37., 38., 39., 40.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 41., 42., 43., 44., 45., 46., 47., 48.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 49., 50., 51., 52., 53., 54., 55., 56.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 57., 58., 59., 60., 61., 62., 63., 64.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 65., 66., 67., 68., 69., 70., 71., 72.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 73., 74., 75., 76., 77., 78., 79., 80.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 81., 82., 83., 84., 85., 86., 87., 88.,
      0., 0., 0., 0., 0., 0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0., 0., 0., 0., 0., 0., 0., 0., 89., 90., 91., 92., 93., 94., 95., 96.};
  const std::array<int, 4> in_shape = {{3, 10, 8, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   1.,   2.,   3.,
      4.,   5.,    30.,   0.,    0.,    0.,   10.,  11.,  12.,  13.,  14.,
      66.,  0.,    0.,    0.,    19.,   20.,  21.,  22.,  23.,  102., 0.,
      0.,   0.,    28.,   29.,   30.,   31.,  32.,  138., 0.,   0.,   0.,
      37.,  38.,   39.,   40.,   41.,   174., 0.,   0.,   0.,   46.,  47.,
      48.,  49.,   50.,   210.,  0.,    0.,   0.,   274., 278., 282., 286.,
      290., 1200., 0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   91.,
      92.,  93.,   94.,   95.,   390.,  0.,   0.,   0.,   100., 101., 102.,
      103., 104.,  426.,  0.,    0.,    0.,   109., 110., 111., 112., 113.,
      462., 0.,    0.,    0.,    118.,  119., 120., 121., 122., 498., 0.,
      0.,   0.,    127.,  128.,  129.,  130., 131., 534., 0.,   0.,   0.,
      136., 137.,  138.,  139.,  140.,  570., 0.,   0.,   0.,   634., 638.,
      642., 646.,  650.,  2640., 0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,    0.,    0.,    0.,    0.,   0.,   0.,   0.,   0.,   0.,
      0.,   181.,  182.,  183.,  184.,  185., 750., 0.,   0.,   0.,   190.,
      191., 192.,  193.,  194.,  786.,  0.,   0.,   0.,   199., 200., 201.,
      202., 203.,  822.,  0.,    0.,    0.,   208., 209., 210., 211., 212.,
      858., 0.,    0.,    0.,    217.,  218., 219., 220., 221., 894., 0.,
      0.,   0.,    226.,  227.,  228.,  229., 230., 930., 0.,   0.,   0.,
      994., 998.,  1002., 1006., 1010., 4080.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x9x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      1.,  2.,  3.,  0.,  0.,  0.,  0., 0., 0., 4.,  5.,  6.,  0.,  0.,  0.,
      0.,  0.,  0.,  7.,  8.,  9.,  0., 0., 0., 0.,  0.,  0.,  10., 11., 12.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      13., 14., 15., 0.,  0.,  0.,  0., 0., 0., 16., 17., 18., 0.,  0.,  0.,
      0.,  0.,  0.,  19., 20., 21., 0., 0., 0., 0.,  0.,  0.,  22., 23., 24.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0., 0., 0., 0.,  0.,  0.,  0.,  0.,  0.,
      25., 26., 27., 0.,  0.,  0.,  0., 0., 0., 28., 29., 30., 0.,  0.,  0.,
      0.,  0.,  0.,  31., 32., 33., 0., 0., 0., 0.,  0.,  0.,  34., 35., 36.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,    10.,
      56.,   60.,   0.,    0.,    0.,    0.,    0.,    0.,    19.,   20.,
      21.,   22.,   23.,   24.,   25.,   26.,   27.,   28.,   128.,  132.,
      0.,    0.,    0.,    0.,    0.,    0.,    37.,   38.,   39.,   40.,
      41.,   42.,   43.,   44.,   45.,   46.,   200.,  204.,  0.,    0.,
      0.,    0.,    0.,    0.,    55.,   56.,   57.,   58.,   59.,   60.,
      61.,   62.,   63.,   64.,   272.,  276.,  0.,    0.,    0.,    0.,
      0.,    0.,    73.,   74.,   75.,   76.,   77.,   78.,   79.,   80.,
      81.,   82.,   344.,  348.,  0.,    0.,    0.,    0.,    0.,    0.,
      91.,   92.,   93.,   94.,   95.,   96.,   97.,   98.,   99.,   100.,
      416.,  420.,  0.,    0.,    0.,    0.,    0.,    0.,    544.,  548.,
      552.,  556.,  560.,  564.,  568.,  572.,  576.,  580.,  2384., 2400.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      181.,  182.,  183.,  184.,  185.,  186.,  187.,  188.,  189.,  190.,
      776.,  780.,  0.,    0.,    0.,    0.,    0.,    0.,    199.,  200.,
      201.,  202.,  203.,  204.,  205.,  206.,  207.,  208.,  848.,  852.,
      0.,    0.,    0.,    0.,    0.,    0.,    217.,  218.,  219.,  220.,
      221.,  222.,  223.,  224.,  225.,  226.,  920.,  924.,  0.,    0.,
      0.,    0.,    0.,    0.,    235.,  236.,  237.,  238.,  239.,  240.,
      241.,  242.,  243.,  244.,  992.,  996.,  0.,    0.,    0.,    0.,
      0.,    0.,    253.,  254.,  255.,  256.,  257.,  258.,  259.,  260.,
      261.,  262.,  1064., 1068., 0.,    0.,    0.,    0.,    0.,    0.,
      271.,  272.,  273.,  274.,  275.,  276.,  277.,  278.,  279.,  280.,
      1136., 1140., 0.,    0.,    0.,    0.,    0.,    0.,    1264., 1268.,
      1272., 1276., 1280., 1284., 1288., 1292., 1296., 1300., 5264., 5280.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      361.,  362.,  363.,  364.,  365.,  366.,  367.,  368.,  369.,  370.,
      1496., 1500., 0.,    0.,    0.,    0.,    0.,    0.,    379.,  380.,
      381.,  382.,  383.,  384.,  385.,  386.,  387.,  388.,  1568., 1572.,
      0.,    0.,    0.,    0.,    0.,    0.,    397.,  398.,  399.,  400.,
      401.,  402.,  403.,  404.,  405.,  406.,  1640., 1644., 0.,    0.,
      0.,    0.,    0.,    0.,    415.,  416.,  417.,  418.,  419.,  420.,
      421.,  422.,  423.,  424.,  1712., 1716., 0.,    0.,    0.,    0.,
      0.,    0.,    433.,  434.,  435.,  436.,  437.,  438.,  439.,  440.,
      441.,  442.,  1784., 1788., 0.,    0.,    0.,    0.,    0.,    0.,
      451.,  452.,  453.,  454.,  455.,  456.,  457.,  458.,  459.,  460.,
      1856., 1860., 0.,    0.,    0.,    0.,    0.,    0.,    1984., 1988.,
      1992., 1996., 2000., 2004., 2008., 2012., 2016., 2020., 8144., 8160.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x9x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  7.,  8.,
      9.,  10., 11., 12., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  13., 14., 15., 16., 17., 18., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  19., 20., 21., 22., 23., 24., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  25., 26., 27., 28., 29., 30., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  31., 32., 33., 34.,
      35., 36., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      37., 38., 39., 40., 41., 42., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  43., 44., 45., 46., 47., 48., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  49., 50., 51., 52., 53., 54., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  55., 56., 57., 58., 59., 60.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  61., 62.,
      63., 64., 65., 66., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  67., 68., 69., 70., 71., 72.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      1.,    2.,    3.,    4.,    5.,    6.,    7.,     8.,     9.,     10.,
      11.,   12.,   13.,   14.,   15.,   16.,   17.,    18.,    19.,    20.,
      108.,  112.,  116.,  120.,  0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    37.,    38.,    39.,    40.,
      41.,   42.,   43.,   44.,   45.,   46.,   47.,    48.,    49.,    50.,
      51.,   52.,   53.,   54.,   55.,   56.,   252.,   256.,   260.,   264.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    73.,   74.,   75.,   76.,   77.,    78.,    79.,    80.,
      81.,   82.,   83.,   84.,   85.,   86.,   87.,    88.,    89.,    90.,
      91.,   92.,   396.,  400.,  404.,  408.,  0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     109.,   110.,
      111.,  112.,  113.,  114.,  115.,  116.,  117.,   118.,   119.,   120.,
      121.,  122.,  123.,  124.,  125.,  126.,  127.,   128.,   540.,   544.,
      548.,  552.,  0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    145.,  146.,  147.,   148.,   149.,   150.,
      151.,  152.,  153.,  154.,  155.,  156.,  157.,   158.,   159.,   160.,
      161.,  162.,  163.,  164.,  684.,  688.,  692.,   696.,   0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      181.,  182.,  183.,  184.,  185.,  186.,  187.,   188.,   189.,   190.,
      191.,  192.,  193.,  194.,  195.,  196.,  197.,   198.,   199.,   200.,
      828.,  832.,  836.,  840.,  0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    1084.,  1088.,  1092.,  1096.,
      1100., 1104., 1108., 1112., 1116., 1120., 1124.,  1128.,  1132.,  1136.,
      1140., 1144., 1148., 1152., 1156., 1160., 4752.,  4768.,  4784.,  4800.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      361.,  362.,  363.,  364.,  365.,  366.,  367.,   368.,   369.,   370.,
      371.,  372.,  373.,  374.,  375.,  376.,  377.,   378.,   379.,   380.,
      1548., 1552., 1556., 1560., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    397.,   398.,   399.,   400.,
      401.,  402.,  403.,  404.,  405.,  406.,  407.,   408.,   409.,   410.,
      411.,  412.,  413.,  414.,  415.,  416.,  1692.,  1696.,  1700.,  1704.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    433.,  434.,  435.,  436.,  437.,   438.,   439.,   440.,
      441.,  442.,  443.,  444.,  445.,  446.,  447.,   448.,   449.,   450.,
      451.,  452.,  1836., 1840., 1844., 1848., 0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     469.,   470.,
      471.,  472.,  473.,  474.,  475.,  476.,  477.,   478.,   479.,   480.,
      481.,  482.,  483.,  484.,  485.,  486.,  487.,   488.,   1980.,  1984.,
      1988., 1992., 0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    505.,  506.,  507.,   508.,   509.,   510.,
      511.,  512.,  513.,  514.,  515.,  516.,  517.,   518.,   519.,   520.,
      521.,  522.,  523.,  524.,  2124., 2128., 2132.,  2136.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      541.,  542.,  543.,  544.,  545.,  546.,  547.,   548.,   549.,   550.,
      551.,  552.,  553.,  554.,  555.,  556.,  557.,   558.,   559.,   560.,
      2268., 2272., 2276., 2280., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    2524.,  2528.,  2532.,  2536.,
      2540., 2544., 2548., 2552., 2556., 2560., 2564.,  2568.,  2572.,  2576.,
      2580., 2584., 2588., 2592., 2596., 2600., 10512., 10528., 10544., 10560.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      721.,  722.,  723.,  724.,  725.,  726.,  727.,   728.,   729.,   730.,
      731.,  732.,  733.,  734.,  735.,  736.,  737.,   738.,   739.,   740.,
      2988., 2992., 2996., 3000., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    757.,   758.,   759.,   760.,
      761.,  762.,  763.,  764.,  765.,  766.,  767.,   768.,   769.,   770.,
      771.,  772.,  773.,  774.,  775.,  776.,  3132.,  3136.,  3140.,  3144.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    793.,  794.,  795.,  796.,  797.,   798.,   799.,   800.,
      801.,  802.,  803.,  804.,  805.,  806.,  807.,   808.,   809.,   810.,
      811.,  812.,  3276., 3280., 3284., 3288., 0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     829.,   830.,
      831.,  832.,  833.,  834.,  835.,  836.,  837.,   838.,   839.,   840.,
      841.,  842.,  843.,  844.,  845.,  846.,  847.,   848.,   3420.,  3424.,
      3428., 3432., 0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    865.,  866.,  867.,   868.,   869.,   870.,
      871.,  872.,  873.,  874.,  875.,  876.,  877.,   878.,   879.,   880.,
      881.,  882.,  883.,  884.,  3564., 3568., 3572.,  3576.,  0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      901.,  902.,  903.,  904.,  905.,  906.,  907.,   908.,   909.,   910.,
      911.,  912.,  913.,  914.,  915.,  916.,  917.,   918.,   919.,   920.,
      3708., 3712., 3716., 3720., 0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    3964.,  3968.,  3972.,  3976.,
      3980., 3984., 3988., 3992., 3996., 4000., 4004.,  4008.,  4012.,  4016.,
      4020., 4024., 4028., 4032., 4036., 4040., 16272., 16288., 16304., 16320.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x9x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,  12.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,  22.,  23.,  24.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  33.,  34.,  35.,  36.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      49.,  50.,  51.,  52.,  53.,  54.,  55.,  56.,  57.,  58.,  59.,  60.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      61.,  62.,  63.,  64.,  65.,  66.,  67.,  68.,  69.,  70.,  71.,  72.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      73.,  74.,  75.,  76.,  77.,  78.,  79.,  80.,  81.,  82.,  83.,  84.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      85.,  86.,  87.,  88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      97.,  98.,  99.,  100., 101., 102., 103., 104., 105., 106., 107., 108.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      109., 110., 111., 112., 113., 114., 115., 116., 117., 118., 119., 120.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      121., 122., 123., 124., 125., 126., 127., 128., 129., 130., 131., 132.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      133., 134., 135., 136., 137., 138., 139., 140., 141., 142., 143., 144.};
  const std::array<int, 4> in_shape = {{3, 10, 9, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      1.,    2.,    3.,   4.,    5.,   6.,   34.,  0.,    0.,    0.,    11.,
      12.,   13.,   14.,  15.,   16.,  74.,  0.,   0.,    0.,    21.,   22.,
      23.,   24.,   25.,  26.,   114., 0.,   0.,   0.,    31.,   32.,   33.,
      34.,   35.,   36.,  154.,  0.,   0.,   0.,   41.,   42.,   43.,   44.,
      45.,   46.,   194., 0.,    0.,   0.,   51.,  52.,   53.,   54.,   55.,
      56.,   234.,  0.,   0.,    0.,   304., 308., 312.,  316.,  320.,  324.,
      1336., 0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    101.,  102., 103.,  104., 105., 106., 434.,  0.,    0.,    0.,
      111.,  112.,  113., 114.,  115., 116., 474., 0.,    0.,    0.,    121.,
      122.,  123.,  124., 125.,  126., 514., 0.,   0.,    0.,    131.,  132.,
      133.,  134.,  135., 136.,  554., 0.,   0.,   0.,    141.,  142.,  143.,
      144.,  145.,  146., 594.,  0.,   0.,   0.,   151.,  152.,  153.,  154.,
      155.,  156.,  634., 0.,    0.,   0.,   704., 708.,  712.,  716.,  720.,
      724.,  2936., 0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    0.,   0.,    0.,   0.,   0.,   0.,    0.,    0.,    0.,
      0.,    0.,    201., 202.,  203., 204., 205., 206.,  834.,  0.,    0.,
      0.,    211.,  212., 213.,  214., 215., 216., 874.,  0.,    0.,    0.,
      221.,  222.,  223., 224.,  225., 226., 914., 0.,    0.,    0.,    231.,
      232.,  233.,  234., 235.,  236., 954., 0.,   0.,    0.,    241.,  242.,
      243.,  244.,  245., 246.,  994., 0.,   0.,   0.,    251.,  252.,  253.,
      254.,  255.,  256., 1034., 0.,   0.,   0.,   1104., 1108., 1112., 1116.,
      1120., 1124., 4536.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x10x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 1.,  2.,  3.,  4.,  0., 0.,  0.,  0.,  0.,
      0., 5.,  6.,  7.,  8.,  0., 0.,  0.,  0.,  0.,  0., 9.,  10., 11., 12.,
      0., 0.,  0.,  0.,  0.,  0., 13., 14., 15., 16., 0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 17., 18., 19., 20., 0., 0.,  0.,  0.,  0.,  0., 21., 22., 23., 24.,
      0., 0.,  0.,  0.,  0.,  0., 25., 26., 27., 28., 0., 0.,  0.,  0.,  0.,
      0., 29., 30., 31., 32., 0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,
      0., 0.,  0.,  0.,  0.,  0., 0.,  0.,  0.,  0.,  0., 33., 34., 35., 36.,
      0., 0.,  0.,  0.,  0.,  0., 37., 38., 39., 40., 0., 0.,  0.,  0.,  0.,
      0., 41., 42., 43., 44., 0., 0.,  0.,  0.,  0.,  0., 45., 46., 47., 48.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    1.,    2.,    3.,    4.,
      5.,    6.,    7.,    8.,    9.,    10.,   11.,   12.,   64.,   68.,
      0.,    0.,    0.,    0.,    0.,    0.,    21.,   22.,   23.,   24.,
      25.,   26.,   27.,   28.,   29.,   30.,   31.,   32.,   144.,  148.,
      0.,    0.,    0.,    0.,    0.,    0.,    41.,   42.,   43.,   44.,
      45.,   46.,   47.,   48.,   49.,   50.,   51.,   52.,   224.,  228.,
      0.,    0.,    0.,    0.,    0.,    0.,    61.,   62.,   63.,   64.,
      65.,   66.,   67.,   68.,   69.,   70.,   71.,   72.,   304.,  308.,
      0.,    0.,    0.,    0.,    0.,    0.,    81.,   82.,   83.,   84.,
      85.,   86.,   87.,   88.,   89.,   90.,   91.,   92.,   384.,  388.,
      0.,    0.,    0.,    0.,    0.,    0.,    101.,  102.,  103.,  104.,
      105.,  106.,  107.,  108.,  109.,  110.,  111.,  112.,  464.,  468.,
      0.,    0.,    0.,    0.,    0.,    0.,    604.,  608.,  612.,  616.,
      620.,  624.,  628.,  632.,  636.,  640.,  644.,  648.,  2656., 2672.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    201.,  202.,  203.,  204.,
      205.,  206.,  207.,  208.,  209.,  210.,  211.,  212.,  864.,  868.,
      0.,    0.,    0.,    0.,    0.,    0.,    221.,  222.,  223.,  224.,
      225.,  226.,  227.,  228.,  229.,  230.,  231.,  232.,  944.,  948.,
      0.,    0.,    0.,    0.,    0.,    0.,    241.,  242.,  243.,  244.,
      245.,  246.,  247.,  248.,  249.,  250.,  251.,  252.,  1024., 1028.,
      0.,    0.,    0.,    0.,    0.,    0.,    261.,  262.,  263.,  264.,
      265.,  266.,  267.,  268.,  269.,  270.,  271.,  272.,  1104., 1108.,
      0.,    0.,    0.,    0.,    0.,    0.,    281.,  282.,  283.,  284.,
      285.,  286.,  287.,  288.,  289.,  290.,  291.,  292.,  1184., 1188.,
      0.,    0.,    0.,    0.,    0.,    0.,    301.,  302.,  303.,  304.,
      305.,  306.,  307.,  308.,  309.,  310.,  311.,  312.,  1264., 1268.,
      0.,    0.,    0.,    0.,    0.,    0.,    1404., 1408., 1412., 1416.,
      1420., 1424., 1428., 1432., 1436., 1440., 1444., 1448., 5856., 5872.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
      0.,    0.,    0.,    0.,    0.,    0.,    401.,  402.,  403.,  404.,
      405.,  406.,  407.,  408.,  409.,  410.,  411.,  412.,  1664., 1668.,
      0.,    0.,    0.,    0.,    0.,    0.,    421.,  422.,  423.,  424.,
      425.,  426.,  427.,  428.,  429.,  430.,  431.,  432.,  1744., 1748.,
      0.,    0.,    0.,    0.,    0.,    0.,    441.,  442.,  443.,  444.,
      445.,  446.,  447.,  448.,  449.,  450.,  451.,  452.,  1824., 1828.,
      0.,    0.,    0.,    0.,    0.,    0.,    461.,  462.,  463.,  464.,
      465.,  466.,  467.,  468.,  469.,  470.,  471.,  472.,  1904., 1908.,
      0.,    0.,    0.,    0.,    0.,    0.,    481.,  482.,  483.,  484.,
      485.,  486.,  487.,  488.,  489.,  490.,  491.,  492.,  1984., 1988.,
      0.,    0.,    0.,    0.,    0.,    0.,    501.,  502.,  503.,  504.,
      505.,  506.,  507.,  508.,  509.,  510.,  511.,  512.,  2064., 2068.,
      0.,    0.,    0.,    0.,    0.,    0.,    2204., 2208., 2212., 2216.,
      2220., 2224., 2228., 2232., 2236., 2240., 2244., 2248., 9056., 9072.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x10x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  9.,  10.,
      11., 12., 13., 14., 15., 16., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  17., 18., 19., 20., 21., 22., 23., 24., 0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  25., 26., 27., 28.,
      29., 30., 31., 32., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  33., 34., 35., 36.,
      37., 38., 39., 40., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  41., 42., 43., 44., 45., 46., 47., 48., 0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  49., 50., 51., 52., 53., 54.,
      55., 56., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      57., 58., 59., 60., 61., 62., 63., 64., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      65., 66., 67., 68., 69., 70., 71., 72., 0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  0.,  0.,  73., 74., 75., 76., 77., 78., 79., 80.,
      0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  81., 82.,
      83., 84., 85., 86., 87., 88., 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
      0.,  0.,  0.,  0.,  89., 90., 91., 92., 93., 94., 95., 96.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, SAME3x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1.,    2.,    3.,    4.,    5.,     6.,     7.,     8.,
      9.,    10.,   11.,   12.,   13.,   14.,   15.,    16.,    17.,    18.,
      19.,   20.,   21.,   22.,   23.,   24.,   124.,   128.,   132.,   136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    41.,   42.,   43.,   44.,   45.,    46.,    47.,    48.,
      49.,   50.,   51.,   52.,   53.,   54.,   55.,    56.,    57.,    58.,
      59.,   60.,   61.,   62.,   63.,   64.,   284.,   288.,   292.,   296.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    81.,   82.,   83.,   84.,   85.,    86.,    87.,    88.,
      89.,   90.,   91.,   92.,   93.,   94.,   95.,    96.,    97.,    98.,
      99.,   100.,  101.,  102.,  103.,  104.,  444.,   448.,   452.,   456.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    121.,  122.,  123.,  124.,  125.,   126.,   127.,   128.,
      129.,  130.,  131.,  132.,  133.,  134.,  135.,   136.,   137.,   138.,
      139.,  140.,  141.,  142.,  143.,  144.,  604.,   608.,   612.,   616.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    161.,  162.,  163.,  164.,  165.,   166.,   167.,   168.,
      169.,  170.,  171.,  172.,  173.,  174.,  175.,   176.,   177.,   178.,
      179.,  180.,  181.,  182.,  183.,  184.,  764.,   768.,   772.,   776.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    201.,  202.,  203.,  204.,  205.,   206.,   207.,   208.,
      209.,  210.,  211.,  212.,  213.,  214.,  215.,   216.,   217.,   218.,
      219.,  220.,  221.,  222.,  223.,  224.,  924.,   928.,   932.,   936.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1204., 1208., 1212., 1216., 1220.,  1224.,  1228.,  1232.,
      1236., 1240., 1244., 1248., 1252., 1256., 1260.,  1264.,  1268.,  1272.,
      1276., 1280., 1284., 1288., 1292., 1296., 5296.,  5312.,  5328.,  5344.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    401.,  402.,  403.,  404.,  405.,   406.,   407.,   408.,
      409.,  410.,  411.,  412.,  413.,  414.,  415.,   416.,   417.,   418.,
      419.,  420.,  421.,  422.,  423.,  424.,  1724.,  1728.,  1732.,  1736.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    441.,  442.,  443.,  444.,  445.,   446.,   447.,   448.,
      449.,  450.,  451.,  452.,  453.,  454.,  455.,   456.,   457.,   458.,
      459.,  460.,  461.,  462.,  463.,  464.,  1884.,  1888.,  1892.,  1896.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    481.,  482.,  483.,  484.,  485.,   486.,   487.,   488.,
      489.,  490.,  491.,  492.,  493.,  494.,  495.,   496.,   497.,   498.,
      499.,  500.,  501.,  502.,  503.,  504.,  2044.,  2048.,  2052.,  2056.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    521.,  522.,  523.,  524.,  525.,   526.,   527.,   528.,
      529.,  530.,  531.,  532.,  533.,  534.,  535.,   536.,   537.,   538.,
      539.,  540.,  541.,  542.,  543.,  544.,  2204.,  2208.,  2212.,  2216.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    561.,  562.,  563.,  564.,  565.,   566.,   567.,   568.,
      569.,  570.,  571.,  572.,  573.,  574.,  575.,   576.,   577.,   578.,
      579.,  580.,  581.,  582.,  583.,  584.,  2364.,  2368.,  2372.,  2376.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    601.,  602.,  603.,  604.,  605.,   606.,   607.,   608.,
      609.,  610.,  611.,  612.,  613.,  614.,  615.,   616.,   617.,   618.,
      619.,  620.,  621.,  622.,  623.,  624.,  2524.,  2528.,  2532.,  2536.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    2804., 2808., 2812., 2816., 2820.,  2824.,  2828.,  2832.,
      2836., 2840., 2844., 2848., 2852., 2856., 2860.,  2864.,  2868.,  2872.,
      2876., 2880., 2884., 2888., 2892., 2896., 11696., 11712., 11728., 11744.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    801.,  802.,  803.,  804.,  805.,   806.,   807.,   808.,
      809.,  810.,  811.,  812.,  813.,  814.,  815.,   816.,   817.,   818.,
      819.,  820.,  821.,  822.,  823.,  824.,  3324.,  3328.,  3332.,  3336.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    841.,  842.,  843.,  844.,  845.,   846.,   847.,   848.,
      849.,  850.,  851.,  852.,  853.,  854.,  855.,   856.,   857.,   858.,
      859.,  860.,  861.,  862.,  863.,  864.,  3484.,  3488.,  3492.,  3496.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    881.,  882.,  883.,  884.,  885.,   886.,   887.,   888.,
      889.,  890.,  891.,  892.,  893.,  894.,  895.,   896.,   897.,   898.,
      899.,  900.,  901.,  902.,  903.,  904.,  3644.,  3648.,  3652.,  3656.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    921.,  922.,  923.,  924.,  925.,   926.,   927.,   928.,
      929.,  930.,  931.,  932.,  933.,  934.,  935.,   936.,   937.,   938.,
      939.,  940.,  941.,  942.,  943.,  944.,  3804.,  3808.,  3812.,  3816.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    961.,  962.,  963.,  964.,  965.,   966.,   967.,   968.,
      969.,  970.,  971.,  972.,  973.,  974.,  975.,   976.,   977.,   978.,
      979.,  980.,  981.,  982.,  983.,  984.,  3964.,  3968.,  3972.,  3976.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    1001., 1002., 1003., 1004., 1005.,  1006.,  1007.,  1008.,
      1009., 1010., 1011., 1012., 1013., 1014., 1015.,  1016.,  1017.,  1018.,
      1019., 1020., 1021., 1022., 1023., 1024., 4124.,  4128.,  4132.,  4136.,
      0.,    0.,    0.,    0.,    0.,    0.,    0.,     0.,     0.,     0.,
      0.,    0.,    4404., 4408., 4412., 4416., 4420.,  4424.,  4428.,  4432.,
      4436., 4440., 4444., 4448., 4452., 4456., 4460.,  4464.,  4468.,  4472.,
      4476., 4480., 4484., 4488., 4492., 4496., 18096., 18112., 18128., 18144.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(MaxWindow7Stride1Grad, VALID3x10x10x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,   10.,  11.,  12.,
      13.,  14.,  15.,  16.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   17.,  18.,  19.,  20.,  21.,  22.,  23.,  24.,
      25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   33.,  34.,  35.,  36.,
      37.,  38.,  39.,  40.,  41.,  42.,  43.,  44.,  45.,  46.,  47.,  48.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      49.,  50.,  51.,  52.,  53.,  54.,  55.,  56.,  57.,  58.,  59.,  60.,
      61.,  62.,  63.,  64.,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   65.,  66.,  67.,  68.,  69.,  70.,  71.,  72.,
      73.,  74.,  75.,  76.,  77.,  78.,  79.,  80.,  0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   81.,  82.,  83.,  84.,
      85.,  86.,  87.,  88.,  89.,  90.,  91.,  92.,  93.,  94.,  95.,  96.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      97.,  98.,  99.,  100., 101., 102., 103., 104., 105., 106., 107., 108.,
      109., 110., 111., 112., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   113., 114., 115., 116., 117., 118., 119., 120.,
      121., 122., 123., 124., 125., 126., 127., 128., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   129., 130., 131., 132.,
      133., 134., 135., 136., 137., 138., 139., 140., 141., 142., 143., 144.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      145., 146., 147., 148., 149., 150., 151., 152., 153., 154., 155., 156.,
      157., 158., 159., 160., 0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   161., 162., 163., 164., 165., 166., 167., 168.,
      169., 170., 171., 172., 173., 174., 175., 176., 0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,
      0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   177., 178., 179., 180.,
      181., 182., 183., 184., 185., 186., 187., 188., 189., 190., 191., 192.};
  const std::array<int, 4> in_shape = {{3, 10, 10, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<7, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
